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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 最新Web前端面试题精选大全及答案「建议收藏」

    最新Web前端面试题精选大全及答案「建议收藏」HTML、CSS相关1.网络中使用最多的图片格式有哪些JPEG,GIF,PNG,最流行的是jpeg格式,可以把文件压缩到最小在ps以jpeg格式存储时,提供11级压缩级别2.请简述css盒子模型一个css盒子从外到内可以分成四个部分:margin(外边距),border(边框),padding(内边距),content(内容)。默认情况下,盒子的width和height属性只是设置content(内容)的宽和高,盒子真正的宽应该是:内容宽度+左右填充+左右边距+左右边框盒子真正

    2022年4月30日
  • GIMP 教程

    GIMP 教程二个内容一样,下面的新点。都是本人原创。http://linux-wiki.cn/work/gimp/index.htmhttp://www.rzgimp.com/

    2022年6月16日
  • ext.apply()_vba中evaluate使用方法

    ext.apply()_vba中evaluate使用方法EXT.applyEXT.apply方法详解EXT.apply方法详解apply的用法:Ext中apply及applyIf方法的应用apply及applyIf方法都是用于实现把一个对象中的属性应用于另外一个对象中,相当于属性拷贝。不同的是apply将会覆盖目标对象中的属性,而applyIf只拷贝目标对象中没有而源对象中有的属性。apply方法的签名为“apply(Objectobj,Objectconfig,Objectdefaults):Object”,该方法包含

    2022年7月28日
  • 二叉查找树C++实现

    二分查找树特点:(1)若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)任意节点的左、右子树

    2021年12月18日
  • Mac OS 的一点历史: Mac OS, Mac OSX 与Darwin

    作为收购 NeXT 公司的结果,苹果公司获得了 NeXTSTEP 架构中的 Mach 和 Objective-C 等设计

    2021年12月26日
  • mysql字符串转数字解决办法

    mysql字符串转数字解决办法1.直接用加法  字符串字段+02.使用函数,这里的type可以为:浮点数:DECIMAL、整数:SIGNED、无符号整数:UNSIGNEDCAST(valueastype);CONVERT(value,type);

    2022年5月30日

发表回复

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

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