SqlTransaction 数据库编程事务使用示例

SqlTransaction 数据库编程事务使用示例在提交或回滚SqlTransaction时,应始终使用Try/Catch进行异常处理。如果连接终止或事务已在服务器上回滚,则Commit和Rollback都会生成InvalidOperationException。 下面的示例创建一个SqlConnection和一个SqlTransaction。此示例还演示如何使用BeginTransaction、Commit和…

大家好,又见面了,我是你们的朋友全栈君。

在提交或回滚 SqlTransaction 时,应始终使用 Try/Catch 进行异常处理。如果连接终止或事务已在服务器上回滚,则 Commit 和 Rollback 都会生成 InvalidOperationException。

 

下面的示例创建一个 SqlConnection 和一个 SqlTransaction。此示例还演示如何使用 BeginTransaction、Commit 和 Rollback 等方法。出现任何错误时事务都会回滚。Try/Catch 错误处理用于处理尝试提交或回滚事务时的所有错误。

using
 System;

using
 System.Configuration;

using
 System.Data.SqlClient;

using
 System.Transactions;

SqlTransaction 数据库编程事务使用示例


protected
 
void
 Page_Load(
object
 sender, EventArgs e)
        {

            
            

using
 (SqlConnection conn 
=
 
new
 SqlConnection(ConfigurationManager.ConnectionStrings[

ConnStr

].ToString()))
            {

                conn.Open();
                SqlTransaction _transaction 

=
 conn.BeginTransaction();                  
                

try

                {

                    SqlCommand _cmd 

=
 
new
 SqlCommand(

Insert Into T_Test(F_Name) values(@Name)

,conn);
                    _cmd.Parameters.Add(

new
 SqlParameter(

@Name



Test1

));
                    _cmd.Transaction 

=
 _transaction;
                    _cmd.ExecuteNonQuery();

                    _cmd.Parameters.Clear();
                    _cmd.Parameters.Add(
new
 SqlParameter(

@Name



Test2

 
+
 
new
 String(

2


100
)));
                    _cmd.ExecuteNonQuery();

//
F_Name为Nvarchar(50),这里会报错



                    _transaction.Commit();

                    Response.Write(

二条记录已经成功入库!

);
                }
                

catch
 (Exception ex)
                {

                    Response.Write(


发生错误:

 
+
 ex.Message.ToString());
                    

try

                    {

                        _transaction.Rollback();
                        Response.Write(


<br/>事务已成功回滚!

);
                    }
                    

catch
 (Exception ex2)
                    {

                        Response.Write(


<br/>回滚失败:

 
+
 ex2.Message.ToString());
                    }
                }
                _transaction.Dispose();
            }
        }  

 

如果换成时下流行的Linq To Sql写法,大致如下:

using
 (DataContext context 
=
 
new
 DataContext(connStr))
            {

                SqlConnection conn 
=
 
new
 SqlConnection();                   
                

if
 (context.Connection 
!=
 
null
 
&&
 context.Connection.State
!=
ConnectionState.Open) context.Connection.Open();

                context.Transaction 
=
 context.Connection.BeginTransaction();
                

try

                {

                    User user 

=
 
new
 User();
                    user.Name 

=
 

aaaa

;
                    users.Add(user);
                    context.SubmitChanges();

                    users.Remove(users.Single(u 
=>
 u.Name 
==
 

aaaa

));
                    context.SubmitChanges();

                    context.Transaction.Commit();
                }
                
catch

                {

                    

try

                    {

                        context.Transaction.Rollback();
                    }
                    

catch
 
                    {

                        

//
SqlTransaction 数据库编程事务使用示例


                    }
                }
            }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142705.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号