2012-04-29 76 views
0

我想写一个简单的代码行,将删除某个表中的所有数据行。 (使用c#和MS Access 2010) 该表包含约1000行,10列,并且它有点慢。有没有办法使用c#和MS Access删除表中的所有行?

此代码的工作:

connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Words\shinunonDB.accdb;Persist Security Info=False;"; 

    OleDbConnection Conn = new OleDbConnection(); 
    Conn.ConnectionString = connStr; 
    sql = "select * from Heb"; 
    Conn.Open(); 
    OleDbDataAdapter da = new OleDbDataAdapter(sql, Conn); 
    DataSet ds = new DataSet(); 
    OleDbCommandBuilder cb = new OleDbCommandBuilder(da); 

    da.Fill(ds, "Heb"); 
    foreach (DataRow dRow in ds.Tables["heb"].Rows) 
    { 
     dRow.Delete(); 
    } 
    da.Update(ds, "heb"); 

但我想有可能是一个更短和更有效的方式来做到这一点。

谢谢你们。

回答

8

是的,有。只需使用SQL命令:

delete from Heb; 

您可以在OleDbConnection上发出SQL命令。这样的事情:

OleDbCommand ac = new OleDbCommand("delete from Heb",Conn); 
ac.ExecuteNonQuery(); 
+1

谢谢,它是完美的!但有一个问题 - 没有Execute命令可用。我应该使用ExecuteNonQuery()吗?有什么不同?再次感谢。 – 2012-04-29 13:10:44

+0

@ Bobcat100是的,你应该使用ExecuteNonQuery。不同的是,这种方法存在,而执行是巴勃罗圣克鲁斯的不完美记忆的产物。更有帮助的是,我会补充一点,ExecuteNonQuery适用于不从数据库检索数据的SQL语句:其整数返回值表示受命令影响的行数。 ExecuteScalar从数据库返回一个值(例如,使用“USCoins中的select min(Name)”调用ExecuteScalar将返回字符串“dime”)。最后,当然,ExecuteQuery以DbDataReader的形式返回一组行。 – phoog 2012-04-29 14:03:16

+0

ExecuteQuery和DbDataReader是phoog不完美记忆的产物。它们是ExecuteReader和OleDbDataReader。 – 2013-12-12 08:07:10

相关问题