C# 基于数据集的插入/更新中的事务处理
我正在尝试使用dataset在sql server数据库表中插入批量记录。但我不能做交易处理。请帮助我应用以下代码中的事务处理 我正在使用C# 基于数据集的插入/更新中的事务处理,c#,sql-server,ado.net,C#,Sql Server,Ado.net,我正在尝试使用dataset在sql server数据库表中插入批量记录。但我不能做交易处理。请帮助我应用以下代码中的事务处理 我正在使用adapter.UpdateCommand.Transaction=trans但是这一行给了我一个对象引用未设置为对象实例的错误 代码: string ConnectionString = "server=localhost\\sqlexpress;database=WindowsApp;Integrated Security=SSPI;";
adapter.UpdateCommand.Transaction=trans代码>但是这一行给了我一个对象引用未设置为对象实例的错误
代码:
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();
string ConnectionString=“server=localhost\\sqlexpress;database=WindowsApp;integratedsecurity=SSPI;”;
SqlConnection conn=新的SqlConnection(ConnectionString);
conn.Open();
SqlTransaction trans=conn.BeginTransaction(IsolationLevel.Serializable);
SqlDataAdapter=新的SqlDataAdapter(“根据Id从测试顺序中选择*”,conn);
SqlCommandBuilder=新的SqlCommandBuilder(适配器);
adapter.UpdateCommand.Transaction=trans;
//创建数据集对象
数据集ds=新数据集(“测试集”);
适配器。填充(ds,“测试”);
//创建数据表对象并添加新行
DataTable TestTable=ds.Tables[“Test”];
对于(int i=1;i如果数据适配器不便于传入事务,并且不在内部处理它,那么您可以使用TransactionScope
强制它,因为这是环境而不是显式的
然而,我在这里的主要指导是更简单的:停止使用数据集和数据适配器。它们基本上是.NET之前模式的遗留物,在.NET的数据工具处于早期状态时非常方便。它不再处于那种状态。实际上,任何其他数据访问工具都会更可取。我无法测试您的代码,但我您认为还应该将trans
对象的连接传递到适配器,如以下示例所示:
...
adapter.UpdateCommand.Connection = trans.Connection;
adapter.UpdateCommand.Transaction = trans;
...
祝你好运
来源:是适配器。UpdateCommand
这里可能是null
吗?哦,事实上,怎么可能更新SELECT SQL语句呢?:)@lhsan嗯,适配器可以从SELECT语句中推断出很多信息-但是,它没有设置.UpdateCommand
;.UpdateCommand
专门用于提供自定义更新