当前位置:编程学习 > C#/ASP.NET >>

PetShop中将SqlTransaction作为参数的方法如何理解或使用

最近在研究PetShop 4的DBHelper类,关于SQLServer部分的SQLHelper类中,其他的代码都好理解,但就是下面这个方法是将SqlTransaction作为参数来执行T-SQL命令,并返回受影响的行数。
但是我看到在方法中,又没有涉及到事务的开始、提交以及发生错误时的回滚操作。除了事务外还有传进来了一个T-SQL语句cmdText。本人目前还处于学习C#的初级阶段,以前做事务的提交,都是直接
            trans=conn.BeginTransaction();
            trans.Commit();
            trans.Rollback();
至于下面的方法,我还不清楚是怎么执行的。哪位高手能够写一段示例代码,执行下面的ExecuteNonQuery事务方法,向数据库中插入三条记录,并附带事务处理。


        /// <summary>
        /// Execute a SqlCommand (that returns no resultset) using an existing SQL Transaction 
        /// using the provided parameters.
        /// </summary>       
        public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {
            SqlCommand cmd = new SqlCommand();
            PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }


因为这个方法还调用了一个PrepareCommand的方法,我现在把这个方法也贴出来。


private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) {

            if (conn.State != ConnectionState.Open)
                conn.Open();

            cmd.Connection = conn;
            cmd.CommandText = cmdText;

            if (trans != null)
                cmd.Transaction = trans;

            cmd.CommandType = cmdType;

            if (cmdParms != null) {
                foreach (SqlParameter parm in cmdParms)
                    cmd.Parameters.Add(parm);
            }
        }

谢谢各位大哥大嫂帮忙了。 --------------------编程问答-------------------- 代码居然不能着色显示...:

                ///   <summary> 
                ///   Execute   a   SqlCommand   (that   returns   no   resultset)   using   an   existing   SQL   Transaction   
                ///   using   the   provided   parameters. 
                ///   </summary>               
                public   static   int   ExecuteNonQuery(SqlTransaction   trans,   CommandType   cmdType,   string   cmdText,   params   SqlParameter[]   commandParameters)   { 
                        SqlCommand   cmd   =   new   SqlCommand(); 
                        PrepareCommand(cmd,   trans.Connection,   trans,   cmdType,   cmdText,   commandParameters); 
                        int   val   =   cmd.ExecuteNonQuery(); 
                        cmd.Parameters.Clear(); 
                        return   val; 
                } 



附加方法:

private   static   void   PrepareCommand(SqlCommand   cmd,   SqlConnection   conn,   SqlTransaction   trans,   CommandType   cmdType,   string   cmdText,   SqlParameter[]   cmdParms)   { 

                        if   (conn.State   !=   ConnectionState.Open) 
                                conn.Open(); 

                        cmd.Connection   =   conn; 
                        cmd.CommandText   =   cmdText; 

                        if   (trans   !=   null) 
                                cmd.Transaction   =   trans; 

                        cmd.CommandType   =   cmdType; 

                        if   (cmdParms   !=   null)   { 
                                foreach   (SqlParameter   parm   in   cmdParms) 
                                        cmd.Parameters.Add(parm); 
                        } 
                } 
--------------------编程问答-------------------- 自己Google搜索,找到答案了。。。 --------------------编程问答-------------------- 就是在一个事务里执行多个命令
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,