You can use a DataTable to store records, insert, delete or modify rows and update all changes in one batch using SqlDataAdapter UpdateBatchSize (0 means without limits):
public static void BatchUpdate(DataTable dataTable,Int32 batchSize) { // Assumes GetConnectionString() returns a valid connection string. string connectionString = GetConnectionString(); // Connect to the AdventureWorks database. using (SqlConnection connection = new SqlConnection(connectionString)) { // Create a SqlDataAdapter. SqlDataAdapter adapter = new SqlDataAdapter(); // Set the UPDATE command and parameters. adapter.UpdateCommand = new SqlCommand( "UPDATE Production.ProductCategory SET " + " Name=@Name WHERE ProductCategoryID=@ProdCatID ;", connection); adapter.UpdateCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name"); adapter.UpdateCommand.Parameters.Add("@ProdCatID", SqlDbType.Int, 4, "ProductCategoryID"); adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.None; // Set the INSERT command and parameter. adapter.InsertCommand = new SqlCommand( "INSERT INTO Production.ProductCategory (Name) VALUES (@Name);", connection); adapter.InsertCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name"); adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None; // Set the DELETE command and parameter. adapter.DeleteCommand = new SqlCommand( "DELETE FROM Production.ProductCategory " + "WHERE ProductCategoryID=@ProdCatID ;", connection); adapter.DeleteCommand.Parameters.Add("@ProdCatID", SqlDbType.Int, 4, "ProductCategoryID"); adapter.DeleteCommand.UpdatedRowSource = UpdateRowSource.None; // Set the batch size. adapter.UpdateBatchSize = batchSize; // Execute the update. adapter.Update(dataTable); } }
http://msdn.microsoft.com/en-us/library/aadf8fk2.aspx
I assume that you misunderstand how dbms works internally. it
UPDATE TableName SET Column = 5 WHERE RowID = 1000; UPDATE TableName SET Column = 5 WHERE RowID = 1002;
coincides with
UPDATE TableName SET Column = 5 WHERE RowID IN(1000,2002);
In any case, dbms will update all affected records one by one, even if you write an operator like UPDATE table SET value=1 , which will affect every record in the table. By updating in one batch, you guarantee that all updates (deletions, inserts) will be sent to the database, and not in one round for each operator.
Tim schmelter
source share