博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SqlDBHelper类中的方法,如何加上事务机制

Posted on 2013-01-22 16:36  一刻  阅读(1456)  评论(0)    收藏  举报

        /// 执行多条SQL语句,实现数据库事务。
        
///

        
///多条SQL语句        
        
///影响的记录数
        publicstaticint ExecuteSqlTran(List<String> SQLStringList)
        {
            
using (SqlConnection conn =new SqlConnection(connectionString))
            {
                conn.Open();
                SqlCommand cmd
=new SqlCommand();
                cmd.Connection
= conn;
                SqlTransaction tx
= conn.BeginTransaction();
                cmd.Transaction
= tx;
               
try
                {
                    
int count =0;
                    
for (int n =0; n < SQLStringList.Count; n++)
                    {
                        
string strsql = SQLStringList[n];
                        
if (strsql.Trim().Length >1)
                        {
                            cmd.CommandText
= strsql;
                            count
+= cmd.ExecuteNonQuery();
                        }
                    }
                    tx.Commit();
                    
return count;
                }
               
catch
                {
                    tx.Rollback();
                    
return0;
                }
            }
        }

        
///
        
/// 执行多条SQL语句,实现数据库事务。
        
///

        
///SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])
        publicstaticvoid ExecuteSqlTran(Hashtable SQLStringList)
        {
            
using (SqlConnection conn =new SqlConnection(connectionString))
            {
                conn.Open();
               
using (SqlTransaction trans = conn.BeginTransaction())
                {
                    SqlCommand cmd
=new SqlCommand();
                    
try
                    {
                        
//循环
                        foreach (DictionaryEntry myDE in SQLStringList)
                        {
                           
string cmdText = myDE.Key.ToString();
                            SqlParameter[] cmdParms
= (SqlParameter[])myDE.Value;
                            PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
                           
int val = cmd.ExecuteNonQuery();
                            cmd.Parameters.Clear();
                        }
                        trans.Commit();
                    }
                    
catch
                    {
                        trans.Rollback();
                        
throw;
                    }
                }
            }
        }

        
///
        
/// 执行存储过程,返回影响的行数        
        
///

        
///存储过程名列表
        
///存储过程参数列表
        
///影响的行数
        
///
        publicstaticint RunProcedure(List<string> storedProcName, List<System.Data.SqlClient.SqlParameter[]> object_parameter, outint rowsAffected)
        {
            
using (SqlConnection connection =new SqlConnection(connectionString))
            {

                connection.Open();
                SqlTransaction tx
= connection.BeginTransaction();
                SqlCommand command
=new SqlCommand();
                command.Transaction
= tx;
               
try
                {
                    
//int result = 0;
                    int rowsaffected =0;
                    
int i =0;
                    
foreach (System.Data.SqlClient.SqlParameter[] parameters in object_parameter)
                    {
                        command
= BuildIntCommand(connection, storedProcName, parameters);
                        command.Transaction
= tx;
                        rowsaffected
+= command.ExecuteNonQuery();
                        
// result += (int)command.Parameters["ReturnValue"].Value;
                        i++;
                    }
                    tx.Commit();
                    rowsAffected
= rowsaffected;
                    
return1;
                }
               
catch
                {
                    tx.Rollback();
                    rowsAffected
=0;
                    
return0;
                }
            }
        }