2012-01-05 51 views
0

我尝试使用DBDataAdapter.Update Method中的代码示例清除数据库中的表。为什么调用DataTable.Clear(),那么DBDataAdapter.Update(DataTable)不会清除数据库中的表?

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM WebCam", connection); 
    DataTable table = new DataTable(); 
    adapter.Fill(table); 
    table.PrimaryKey = new DataColumn[] { table.Columns["Date"] }; 
    //table.Rows[0]["Date"] = System.DateTime.Now; //It's OK to modify a row 
    table.Clear(); //But it is not working to clear the table 
    SqlCommandBuilder builder = new SqlCommandBuilder(adapter); 
    adapter.Update(table); 
} 

我可以添加新行或修改现有行,即可将更改提交到数据库,但如果我尝试清空表,更改为“表”不能被提交到数据库,此外,也不会抛出异常。

我想念什么?

+1

尽管似乎没有抛出任何异常,但使用Try ... Catch总是包围数据库操作是一种很好的编程习惯。 Clear方法将针对因违反关系而导致的任何错误发出异常。否则代码看起来是正确的。 – 2012-01-05 16:45:09

+0

原来我可以通过在每一行调用DataRow.Delete()来清除表。但仍然不知道为什么DataTable.Clear()不起作用。 – kennyzx 2012-01-06 01:59:03

+0

有关Clear方法的MSDN参考信息并不十分清晰(没有双关语意思)。这里有一个似乎有意义的链接:http://www.canaware.com/default.aspx?g=posts&t=932 – 2012-01-06 03:24:57

回答

0

ü应该在这条线得到错误:

table.PrimaryKey =新的DataColumn [] {table.Columns [ “日”]};

这将意味着你已经捕捉到异常的其他地方,也许从函数被调用的地方,而不是在邮件框中显示错误。

另一个原因可能是因为你正在使用像表,适配器等词......我的猜测是,你可能会超载一些保留字的功能。

相关问题