我正在努力改进程序。它的作用是使用C#datatable并将其作为批量复制插入到sql表中。我想要实现的是用新值重写整个表,但是如果由于某种原因我在副本上出错,那么表格最后会为空。
如何在批量复制失败时避免删除表?
这是我目前的代码。
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlBulkCopy bc = new SqlBulkCopy(conn.ConnectionString, SqlBulkCopyOptions.TableLock);
bc.DestinationTableName = "vehicle";
bc.BatchSize = vehicleData.Rows.Count;
SqlCommand cmd = new SqlCommand("DELETE FROM dbo.vehicle");
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
bc.WriteToServer(vehicleData);
bc.Close();
conn.Close();
}
答案 0 :(得分:0)
您可以执行交易中的所有内容:
using (var ts = new TransactionScope())
using (var conn = new SqlConnection(connectionString))
{
try {
conn.Open();
using (var cmd = new SqlCommand("DELETE FROM dbo.vehicle"))
{
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
}
using (var bc = new SqlBulkCopy(conn))
{
bc.DestinationTableName = "vehicle";
bc.BatchSize = vehicleData.Rows.Count;
bc.WriteToServer(vehicleData);
}
ts.Complete(); // Commit
} catch (Exception ex) {
//TODO: handle exception
}
}
如果事务中的某些内容失败,则所有内容都将回滚。