我正在尝试使用数据集在sql server数据库表中插入批量记录。但我无法进行交易处理。请帮我在下面的代码中应用交易处理。
我正在使用adapter.UpdateCommand.Transaction = trans;
,但这一行给出了一个错误,即Object引用没有设置为对象的实例。
代码:
string ConnectionString = "server=localhost\\sqlexpress;database=WindowsApp;Integrated Security=SSPI;";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();
SqlTransaction trans = conn.BeginTransaction(IsolationLevel.Serializable);
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Test ORDER BY Id", conn);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.UpdateCommand.Transaction = trans;
// Create a dataset object
DataSet ds = new DataSet("TestSet");
adapter.Fill(ds, "Test");
// Create a data table object and add a new row
DataTable TestTable = ds.Tables["Test"];
for (int i=1;i<=50;i++)
{
DataRow row = TestTable.NewRow();
row["Id"] = i;
TestTable .Rows.Add(row);
}
// Update data adapter
adapter.Update(ds, "Test");
trans.Commit();
conn.Close();
答案 0 :(得分:1)
如果数据适配器不能轻松传递事务,并且不在内部处理它,那么可能可以使用TransactionScope
强制它相反 - 因为这是环境而非显性。
然而!我在这里的主要指导会更简单:停止使用数据集和数据适配器。它们基本上从.NET模式中解脱,并且在.NET的数据工具处于早期状态时非常方便。它不再处于那种状态。实际上任何其他数据访问工具都是首选。
答案 1 :(得分:0)
我无法测试您的代码,但我认为您还应该将trans
对象的连接传递给您的适配器,如下例所示:
...
adapter.UpdateCommand.Connection = trans.Connection;
adapter.UpdateCommand.Transaction = trans;
...
祝你好运!
来源:CodeProject