3

我已经初始化了一个 dataAdapter :

string sql = "SELECT * From localitati";
da1 = new System.Data.SqlClient.SqlDataAdapter(sql, con);
da1.Fill(ds1, "localitati");

这很好用。问题是当我尝试删除记录并更新数据库时。我从数据集中删除了一条记录:

ds1.Tables["localitati"].Rows.Remove(dRow);

这也很好用(已验证)。

问题是当我更新 DataAdapter 时,DataBase 没有被修改:

con.Open()
da1.Update(ds1, "localitati");
con.Close();

可能是什么问题呢 ?

4

5 回答 5

13

为我解决的问题是调用 上的方法DeleteDataRow不是. RemoveDataTable

ds.Tables["localitati"].Rows.Find(primaryKeyValue).Delete();

或者只是简单地

dr.Delete();
于 2012-08-21T00:18:10.263 回答
1

您需要确保已设置 da1.DeleteCommand - 这是将为已删除的 DataTable 中的每一行触发的命令。例如,请参阅此 MSDN 参考

于 2010-11-29T08:58:06.813 回答
0

假设数据库没有抛出任何异常,请尝试下面的代码。

con.Open() 
da1.Update(ds1.Tables["localitati"].GetChanges()); 
con.Close(); 
于 2010-11-29T08:43:56.557 回答
0

在您发布的代码中,仅为 DataAdapter 设置了 SelectCommand。您可以使用以下代码为 da1 生成插入、更新和删除命令。

string sql = "SELECT * From localitati";
da1 = new SqlDataAdapter(sql, con);
SqlCommandBuilder builder = new SqlCommandBuilder(da1);
builder.QuotePrefix = "[";
builder.QuoteSuffix = "]";
da1.Fill(ds1, "localitati");

然而,CommandBuilder 应该只用于相对简单的场景(详细信息)。因为他休息建议编写依赖于自定义命令文本/存储过程的自己的命令。

如果它仍然不起作用,您可以在服务器上启动 SQL Server Profiler 以跟踪执行 Update 方法时哪些命令进入数据库。

于 2010-11-29T09:13:10.323 回答
0
DataRow dr = datatable.Rows.Find(key);      
int Index = datatable.Rows.IndexOf(dr);

BindingContext[DataTable].RemoveAt(Index);     
BindingContext[DataTable].EndCurrentEdit(); 

dataAdapter.Update(DataTable);    
DataTable.AcceptChanges();
于 2016-10-15T22:09:51.133 回答