【问题标题】:Remove Row through DataAdapter通过 DataAdapter 删除行
【发布时间】:2011-05-17 04:01:13
【问题描述】:

我已经初始化了一个 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 时,数据库没有被修改:

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

可能是什么问题?

【问题讨论】:

    标签: c# sql-server dataadapter


    【解决方案1】:

    为我解决的问题是在DataRow 上调用Delete 方法,而不是在DataTable 上调用Remove 方法。

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

    或者干脆

    dr.Delete();
    

    【讨论】:

    • 这应该是公认的答案。 .Delete() 方法将提醒父 DataTable 该行已被删除。仅仅从表中删除行是不够的。
    • 在我的代码中,我试图做 Table.Clear()。在 Update 调用之后它没有更新数据库。但是,使用 Delete 确实如此。我同意这应该是公认的答案。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        在您发布的代码中,仅为 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 应该只用于相对简单的场景 (details)。因为他建议自己编写依赖于自定义命令文本/存储过程的命令。

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

        【讨论】:

          【解决方案5】:
          DataRow dr = datatable.Rows.Find(key);      
          int Index = datatable.Rows.IndexOf(dr);
          
          BindingContext[DataTable].RemoveAt(Index);     
          BindingContext[DataTable].EndCurrentEdit(); 
          
          dataAdapter.Update(DataTable);    
          DataTable.AcceptChanges();
          

          【讨论】:

          • 一些解释可能很好
          猜你喜欢
          • 2018-09-03
          • 1970-01-01
          • 2015-08-14
          • 2019-02-12
          • 1970-01-01
          • 2011-02-27
          • 2011-04-29
          • 2012-10-19
          • 2012-10-10
          相关资源
          最近更新 更多