Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过DataAdapter删除行_C#_Sql Server_Dataadapter - Fatal编程技术网

C# 通过DataAdapter删除行

C# 通过DataAdapter删除行,c#,sql-server,dataadapter,C#,Sql Server,Dataadapter,我已初始化数据适配器: string sql = "SELECT * From localitati"; da1 = new System.Data.SqlClient.SqlDataAdapter(sql, con); da1.Fill(ds1, "localitati"); 这个很好用。问题是当我试图删除记录并更新数据库时。 我从数据集中删除记录,如下所示: ds1.Tables["localitati"].Rows.Remove(dRow); 这也很好(已验证) 问题是,当我更新Dat

我已初始化数据适配器:

string sql = "SELECT * From localitati";
da1 = new System.Data.SqlClient.SqlDataAdapter(sql, con);
da1.Fill(ds1, "localitati");
这个很好用。问题是当我试图删除记录并更新数据库时。 我从数据集中删除记录,如下所示:

ds1.Tables["localitati"].Rows.Remove(dRow);
这也很好(已验证)

问题是,当我更新DataAdapter时,数据库不会被修改:

con.Open()
da1.Update(ds1, "localitati");
con.Close();
可能是什么问题?

请尝试下面的代码 假设数据库未引发任何异常

con.Open() 
da1.Update(ds1.Tables["localitati"].GetChanges()); 
con.Close(); 

您需要确保已设置da1.DeleteCommand-这是将为数据表中已删除的每一行激发的命令。请参阅示例。

在您发布的代码中,仅为DataAdapter设置了SelectCommand。 您可以使用以下代码为da1生成Insert、Update和Delete命令

string sql = "SELECT * From localitati";
da1 = new SqlDataAdapter(sql, con);
SqlCommandBuilder builder = new SqlCommandBuilder(da1);
builder.QuotePrefix = "[";
builder.QuoteSuffix = "]";
da1.Fill(ds1, "localitati");
但是,CommandBuilder应仅用于相对简单的场景()。对于rest,建议您根据自定义命令文本/存储过程编写自己的命令


如果它仍然不起作用,您可以在服务器上启动SQL Server探查器,以跟踪执行更新方法时数据库收到的命令。

对我来说,解决的办法是调用
数据行
上的
删除
方法,而不是
数据表
上的
删除
方法

ds.Tables["localitati"].Rows.Find(primaryKeyValue).Delete();
或者干脆

dr.Delete();

这应该是公认的答案。.Delete()方法将通知父数据表该行已被删除。仅仅从表中删除行是不够的。在我的代码中,我试图执行table.Clear()。在更新调用之后,它没有更新数据库。但是,使用Delete确实可以。我同意这应该是公认的答案。一些解释可能会很好
DataRow dr = datatable.Rows.Find(key);      
int Index = datatable.Rows.IndexOf(dr);

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

dataAdapter.Update(DataTable);    
DataTable.AcceptChanges();