ADO.NET 事务

发布于 2024-09-30 09:02:08 字数 80 浏览 0 评论 0原文

使用 ADO.net,如果我填充数据适配器而不隐式执行 BeginTransaction,是否会发生“事务”?如果不是,那么默认的隔离级别是什么?

With ADO.net, if I fill a data adapter without implicitly doing a BeginTransaction, does a "Transaction" happen anyway? If not, then what would be the default isolation level?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

度的依靠╰つ 2024-10-07 09:02:08

DataAdapter 没有隐式事务。

No transaction is implicit with the DataAdapter.

烦人精 2024-10-07 09:02:08

要在数据适配器上运行事务,只需使用 TransactionScope。

using (var ts = new TransactionScope())
{
   // do your data adapter related code
   // ...


   ts.Complete();
}

当使用TransactionScope 时,您也可以指定IsolationLevel(例如可序列化)。 TransactionScope 的默认隔离级别是 Serialized。

To run transaction on your data adapter simply use TransactionScope.

using (var ts = new TransactionScope())
{
   // do your data adapter related code
   // ...


   ts.Complete();
}

When using TransactionScope then you can specify IsolationLevel (e.g. Serializable) as well. The default isolation level on TransactionScope is Serializable.

月下伊人醉 2024-10-07 09:02:08

您将需要显式创建一个事务。与 TransactionScope 一起,您可以使用 SqlTransaction

例如:

            var connString = "Data Source=(local);Integrated security=SSPI; Initial Catalog=Northwind";
            var sql = "SELECT * FROM Orders";

            using (var conn = new SqlConnection(connString))
            {
                conn.Open();
                var da = new SqlDataAdapter(sql, conn);
                var ds = new DataSet();

                // load  data from the data source into the DataSet
                da.Fill(ds, "Orders");

                // start the transaction
                SqlTransaction tran = conn.BeginTransaction();

                // associate transaction with the data adapter command objects
                da.DeleteCommand.Transaction = tran;
                da.InsertCommand.Transaction = tran;
                da.UpdateCommand.Transaction = tran;

                // modify the data in the DataSet
                // submit changes, commit or rollback, and close the connection

                try
                {
                    da.Update(ds, "Orders");
                    // commit if successful
                    tran.Commit();
                }
                catch (Exception)
                {
                    tran.Rollback();
                }
            }

You will need to to explicitly create a transaction. Along with TransactionScope you can use SqlTransaction.

For example:

            var connString = "Data Source=(local);Integrated security=SSPI; Initial Catalog=Northwind";
            var sql = "SELECT * FROM Orders";

            using (var conn = new SqlConnection(connString))
            {
                conn.Open();
                var da = new SqlDataAdapter(sql, conn);
                var ds = new DataSet();

                // load  data from the data source into the DataSet
                da.Fill(ds, "Orders");

                // start the transaction
                SqlTransaction tran = conn.BeginTransaction();

                // associate transaction with the data adapter command objects
                da.DeleteCommand.Transaction = tran;
                da.InsertCommand.Transaction = tran;
                da.UpdateCommand.Transaction = tran;

                // modify the data in the DataSet
                // submit changes, commit or rollback, and close the connection

                try
                {
                    da.Update(ds, "Orders");
                    // commit if successful
                    tran.Commit();
                }
                catch (Exception)
                {
                    tran.Rollback();
                }
            }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文