为什么调用DataTable.Clear(),那么DBDataAdapter.Update(DataTable)不会清除数据库中的表?
问题描述:
我尝试使用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);
}
我可以添加新行或修改现有行,即可将更改提交到数据库,但如果我尝试清空表,更改为“表”不能被提交到数据库,此外,也不会抛出异常。
我想念什么?
答
ü应该在这条线得到错误:
table.PrimaryKey =新的DataColumn [] {table.Columns [ “日”]};
这将意味着你已经捕捉到异常的其他地方,也许从函数被调用的地方,而不是在邮件框中显示错误。
另一个原因可能是因为你正在使用像表,适配器等词......我的猜测是,你可能会超载一些保留字的功能。
尽管似乎没有抛出任何异常,但使用Try ... Catch总是包围数据库操作是一种很好的编程习惯。 Clear方法将针对因违反关系而导致的任何错误发出异常。否则代码看起来是正确的。 – 2012-01-05 16:45:09
原来我可以通过在每一行调用DataRow.Delete()来清除表。但仍然不知道为什么DataTable.Clear()不起作用。 – kennyzx 2012-01-06 01:59:03
有关Clear方法的MSDN参考信息并不十分清晰(没有双关语意思)。这里有一个似乎有意义的链接:http://www.canaware.com/default.aspx?g=posts&t=932 – 2012-01-06 03:24:57