使用DataAdapter进行批量更新的问题

时间:2009-03-04 13:16:50

标签: sql-server-2005 ado.net .net-2.0

我正在使用批量更新更新sql server 2005数据库,如下所示

 cmd = new SqlCommand("update Table1 set column1 = @column1 where EmpNo = @EmpNo", con);
                cmd.Parameters.Add(new SqlParameter("@column1", SqlDbType.VarChar));
                cmd.Parameters["@column1"].SourceVersion = DataRowVersion.Current;
                cmd.Parameters["@column1"].SourceColumn = "Column";

                cmd.Parameters.Add(new SqlParameter("@EmpNo", SqlDbType.Int));
                cmd.Parameters["@EmpNo"].SourceVersion = DataRowVersion.Current;
                cmd.Parameters["@EmpNo"].SourceColumn = "EmpNo";

                cmd.UpdatedRowSource = UpdateRowSource.None;

                sqlDa = new SqlDataAdapter();
                con.Open();
                sqlDa.UpdateCommand =cmd;
                sqlDa.UpdateBatchSize = 10;
                sqlDa.Update(dt);

                con.Close();

但是数据没有更新。我无法弄清楚是什么问题。感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我建议您在发出更新命令之前查看dt。确保有一些RowState为Updated或Added的行。如果没有,您(我假设)DataTable中没有任何内容可以更新到数据库。

另外,请尝试删除.SourceVersion属性集操作。

如果一切正常,请在发出.Update之前在数据库上启动跟踪。

这些只是尝试的第一步。

答案 1 :(得分:0)

SqlDataAdapter方法

使用(SqlCommand insertCommand = new SqlCommand(

" INSERT BulkLoadTable(FieldA,FieldB)VALUES(@ FieldA,@ FieldB)",connection))

{     insertCommand.Parameters.Add(" @ FieldA",SqlDbType.VarChar,10," FieldA");

insertCommand.Parameters.Add("@FieldB", SqlDbType.Int, 4, "FieldB");
// Setting UpdatedRowSource is important if you want to batch up the inserts
insertCommand.UpdatedRowSource = UpdateRowSource.None;
using (SqlDataAdapter insertAdapter = new SqlDataAdapter())
{
    insertAdapter.InsertCommand = insertCommand;
    // How many records to send to the database in one go (all of them)
    insertAdapter.UpdateBatchSize = myDataTable.Rows.Count;

    // Send the inserts to the database
    insertAdapter.Update(myDataTable);                   
}

}