• C#中事务的使用


    View Code
    1 privatestaticint nciisMoidyOffFinance(IP_OrderDrivingLicence model_orders, int typeId)
    2 {
    3 //查询消费时,保存记录编号
    4 int OrderId =0;
    5 using (SqlConnection connection =new SqlConnection(SqlHelper.connectionString))
    6 {
    7 connection.Open();
    8 //使用当前的SQL连接 创建事务并添加共享锁
    9 SqlTransaction tran = connection.BeginTransaction(IsolationLevel.ReadCommitted);
    10 //使用当前的SQL连接创建SQL命令并绑定事务
    11 SqlCommand command = connection.CreateCommand();
    12 command.Transaction = tran;
    13 try
    14 {
    15 //插入查询记录
    16 StringBuilder strSql =new StringBuilder();
    17 strSql.Append("insert into IP_OrderDrivingLicence(");
    18 strSql.Append("jzofId,jzofunId,jzNo,jzName,jzsubtime,jzstate,jzIsrevalue,jzofamount,jzofRemainamount,jzoperatorId)");
    19 strSql.Append(" values (");
    20 strSql.Append("@jzofId,@jzofunId,@jzNo,@jzName,@jzsubtime,@jzstate,@jzIsrevalue,@jzofamount,@jzofRemainamount,@jzoperatorId)");
    21 strSql.Append(";select @@IDENTITY");
    22 SqlParameter[] parameters = {
    23 new SqlParameter("@jzofId", SqlDbType.Int,4),
    24 new SqlParameter("@jzofunId", SqlDbType.Int,4),
    25 new SqlParameter("@jzNo", SqlDbType.VarChar,50),
    26 new SqlParameter("@jzName", SqlDbType.VarChar,50),
    27 new SqlParameter("@jzsubtime", SqlDbType.DateTime),
    28 new SqlParameter("@jzstate", SqlDbType.Int,4),
    29 new SqlParameter("@jzIsrevalue", SqlDbType.Int,4),
    30 new SqlParameter("@jzofamount", SqlDbType.Decimal,9),
    31 new SqlParameter("@jzofRemainamount", SqlDbType.Decimal,9),
    32 new SqlParameter("@jzoperatorId", SqlDbType.Int,4)};
    33 parameters[0].Value = model_orders.jzofId;
    34 parameters[1].Value =23;
    35 parameters[2].Value = model_orders.jzNo;
    36 parameters[3].Value = model_orders.jzName;
    37 parameters[4].Value = DateTime.Now;
    38 parameters[5].Value =0;
    39 parameters[6].Value =0;
    40 parameters[7].Value = model_orders.jzofamount;
    41 parameters[8].Value = model_orders.jzofRemainamount;
    42 parameters[9].Value = model_orders.jzoperatorId;
    43 //设置SQL命令的T-SQL语句
    44 command.CommandType = CommandType.Text;
    45 command.CommandText = strSql.ToString();
    46 //绑定新参数列表
    47 command.Parameters.AddRange(parameters);
    48 //执行失败,回滚事务
    49 object n = command.ExecuteScalar();
    50 if (n ==null)
    51 {
    52 tran.Rollback();
    53 connection.Close();
    54 //出现异常中断
    55 return0;
    56 }
    57 else
    58 {
    59 //保存查询的记录编号
    60 OrderId = Convert.ToInt32(n);
    61 }
    62 SqlParameter[] parameters1 =
    63 {
    64 new SqlParameter("@ofId",SqlDbType.Int,4),
    65 new SqlParameter("@ofOrId",SqlDbType.VarChar,50),
    66 new SqlParameter("@ofSubjectId",SqlDbType.Int,4),
    67 new SqlParameter("@ofType",SqlDbType.Int,4),
    68 new SqlParameter("@ofAmount",SqlDbType.Decimal,9),
    69 new SqlParameter("@ofOPid",SqlDbType.Int,4),
    70 new SqlParameter("@ofText",SqlDbType.VarChar,200),
    71 new SqlParameter("@ofNote1",SqlDbType.VarChar,200),
    72 new SqlParameter("@ofNote2",SqlDbType.VarChar,200),
    73 new SqlParameter("@ofNote3",SqlDbType.VarChar,200),
    74 new SqlParameter("@OperKind",SqlDbType.Int,4),
    75 new SqlParameter("@Result",SqlDbType.Int,4)
    76 };
    77
    78 parameters1[0].Value = model_orders.jzofId;
    79 parameters1[1].Value ="nciisDL"+ OrderId;
    80 parameters1[2].Value =23;
    81 parameters1[3].Value =2;
    82 parameters1[4].Value = model_orders.jzofamount;
    83 parameters1[5].Value =0;
    84 parameters1[6].Value = model_orders.jzNote;
    85 parameters1[7].Value ="驾照查询消费";
    86 parameters1[8].Value =string.Empty;
    87 parameters1[9].Value =string.Empty;
    88 parameters[10].Value = typeId;
    89 parameters[11].Direction = ParameterDirection.Output;
    90 //设置SQL命令的T-SQL语句
    91 command.CommandType = CommandType.StoredProcedure;
    92 command.CommandText ="exchange_officeFinance";
    93 //清空SQL命令中已有的参数列表并重新绑定新的参数列表
    94 command.Parameters.Clear();
    95 command.Parameters.AddRange(parameters1);
    96 command.ExecuteScalar();
    97 int result = Convert.ToInt32(parameters[11].Value);
    98 if (result ==-2)
    99 {
    100 //商户账户冻结
    101 tran.Rollback();
    102 connection.Close();
    103 //出现异常中断
    104 return-2;
    105 }
    106 if (result ==-1)
    107 {
    108 //商户余额不足
    109 tran.Rollback();
    110 connection.Close();
    111 //出现异常中断
    112 return-1;
    113 }
    114 //所有操作成功后,提交事务
    115 tran.Commit();
    116 return OrderId;
    117 }
    118 catch
    119 {
    120 tran.Rollback();
    121 connection.Close();
    122 //出现异常中断
    123 return0;
    124 }
    125
    126 }
    127 }
  • 相关阅读:
    Fiddler显示响应时间
    WPF RichTextBox
    设计模式摘要
    sqlite insert时一直报constraint 约束
    try catch使用规则
    关于WPF的2000件事 06--WPF布局
    SmartAssembly 汉化说明
    GP80系列打印机驱动 V17下载地址
    记录 java 安卓 各类引用包报错处理方法 例如 android.support.v4.app.+ ,io.reactivex.+
    第一讲 新手如何学习HTTP协议之实践项目多开微信机器人
  • 原文地址:https://www.cnblogs.com/wsl2011/p/2056827.html
Copyright © 2020-2023  润新知