DataAdapter Update 方法批量更新多行

Posted

技术标签:

【中文标题】DataAdapter Update 方法批量更新多行【英文标题】:DataAdapter Update method batch updates multiple rows 【发布时间】:2014-11-09 11:11:31 【问题描述】:

我对 DataAdapter 更新方法有疑问:

这是每一行的插入代码:

private void btnInsert_Click(object sender, EventArgs e)
    
        dtTESTDB = dsTESTDB.Tables["dstblTESTDB"];
        drTblTESTDB = dtTESTDB.NewRow();
        drTblTESTDB.BeginEdit();
        drTblTESTDB["ID"] = txtID.Text;
        drTblTESTDB["Name"] = txtName.Text;
        drTblTESTDB["Family"] = txtFamily.Text;
        dtTESTDB.Rows.Add(drTblTESTDB);
        dtTESTDB = dsTESTDB.Tables[0].GetChanges(DataRowState.Added);
        dtlAdd = dtTESTDB;
        drTblTESTDB.EndEdit();
        cmd.Parameters.AddWithValue("@ID", int.Parse(txtID.Text));
        cmd.Parameters.AddWithValue("@Name", txtName.Text);
        cmd.Parameters.AddWithValue("@Family", txtFamily.Text);
        cmd.CommandType = CommandType.Text;
        cmd.Connection = SQLConnection;
        cmd.CommandText = "insert into tblTESTDB 
           (ID,Name,Family) values (@ID,@Name,@Family)";
        cmd.UpdatedRowSource = UpdateRowSource.None;
        da.InsertCommand = cmd;
     

现在,我想在插入多行后更新数据库:

private void btnSynchronize_Click(object sender, EventArgs e)
    
        try
        
            da.UpdateBatchSize = 0;// dttblAdd.Rows.Count;
            da.Update(dtlAdd);
            dsTESTDB.AcceptChanges();
        
        catch (SqlException sqlEX)
        
            MessageBox.Show(sqlEX.ToString());
        
        catch (System.Exception EX)
        
            MessageBox.Show(EX.ToString());
        
    

此代码通过一行插入而没有错误,但如果一次插入两个或多个记录(行),DataAdapter 仅将最后一行插入 DATABASE 并抛出异常。 为什么?

(对不起 - 我的英语说或写得不好)

【问题讨论】:

【参考方案1】:

UpdateBatchSize = 0 可能是问题所在。您需要将其设置为行数。

【讨论】:

以上是关于DataAdapter Update 方法批量更新多行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 DataAdapter.Update 方法同时更新 Access 数据库和 .NET DataSet 对象?

为啥 DataAdapter.Update() 不更新数据库

为啥 DataAdapter.Update 啥也不更新?

mybatis执行批量更新batch update 的方法

为啥当我调用 DataAdapter.Update() 时,此 C# 代码会生成语法错误?

mybatis执行批量更新batch update 的方法(oracle,mysql)