数据访问抽象基础类

/// <summary>
    
/// 数据访问抽象基础类
    
/// </summary>
    
public abstract class SQLHelper
    {
        
//数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.        
        
public static string connectionString = ConfigurationManager.AppSettings["ConnectionString"];

        
/// <summary>
        
/// 准备执行一个命令
        
/// </summary>
        
/// <param name="cmd">sql命令</param>
        
/// <param name="conn">Sql连接</param>
        
/// <param name="trans">Sql事务</param>
        
/// <param name="cmdType">命令类型例如 存储过程或者文本</param>
        
/// <param name="cmdText">命令文本,例如:Select * from Products</param>
        
/// <param name="cmdParms">执行命令的参数</param>
        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>
        
///  给定连接的数据库用假设参数执行一个sql命令(不返回数据集)
        
/// </summary>
        
/// <param name="connectionString">一个有效的连接字符串</param>
        
/// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
        
/// <param name="commandText">存储过程名称或者sql命令语句</param>
        
/// <param name="commandParameters">执行命令所用参数的集合</param>
        
/// <returns>执行命令所影响的行数</returns>
        
public static int ExecuteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {

            SqlCommand cmd 
= new SqlCommand();

            using (SqlConnection conn 
= new SqlConnection(connectionString))
            {
                PrepareCommand(cmd, conn, 
null, cmdType, cmdText, commandParameters);
                
int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                
return val;
            }
        }

        
/// <summary>
        
/// 执行多条SQL语句,实现数据库事务。
        
/// </summary>
        
/// <param name="SQLStringList">多条SQL语句</param>        
        
public static int ExecuteNonQuerySqlTran(List<String> StringList)
        {
            using (SqlConnection conn 
= new SqlConnection(connectionString))
            {
                conn.
Open();
                SqlCommand cmd 
= new SqlCommand();
                cmd.Connection 
= conn;
                SqlTransaction trans 
= conn.BeginTransaction();
                cmd.
Transaction = trans;
                try
                {
                    
int count = 0;
                    
for (int i = 0; i < StringList.Count; i++)
                    {
                        string strsql 
= StringList[i];
                        
if (strsql.Trim().Length > 1)
                        {
                            cmd.CommandText 
= strsql;
                            
count += cmd.ExecuteNonQuery();
                        }
                    }
                    trans.
Commit();
                    
return count;
                }
                catch
                {
                    trans.
Rollback();
                    
return 0;
                }
                finally
                {
                    cmd.Dispose();
                    conn.
Close();
                }
            }
        }
        

        
/// <summary>
        
/// 用执行的数据库连接执行一个返回数据集的sql命令
        
/// </summary>
        
/// <param name="connectionString">一个有效的连接字符串</param>
        
/// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
        
/// <param name="commandText">存储过程名称或者sql命令语句</param>
        
/// <param name="commandParameters">执行命令所用参数的集合</param>
        
/// <returns>包含结果的读取器</returns>
        
public static SqlDataReader ExecuteReader(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            
//创建一个SqlCommand对象
            SqlCommand cmd 
= new SqlCommand();
            
//创建一个SqlConnection对象
            SqlConnection conn 
= new SqlConnection(connectionString);

            
//在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
            
//因此commandBehaviour.CloseConnection 就不会执行
            try
            {
                
//调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
                PrepareCommand(cmd, conn, 
null, cmdType, cmdText, commandParameters);
                
//调用 SqlCommand  的 ExecuteReader 方法
                SqlDataReader reader 
= cmd.ExecuteReader(CommandBehavior.CloseConnection);
                
//清除参数
                cmd.Parameters.Clear();
                
return reader;
            }
            catch
            {
                
//关闭连接,抛出异常
                conn.
Close();
                throw;
            }
        }

        
/// <summary>
        
/// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列
        
/// </summary>
        
///<param name="connectionString">一个有效的连接字符串</param>
        
/// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>
        
/// <param name="cmdText">存储过程名称或者sql命令语句</param>
        
/// <param name="commandParameters">执行命令所用参数的集合</param>
        
/// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
        
public static object ExecuteScalar(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd 
= new SqlCommand();
            using (SqlConnection connection 
= new SqlConnection(connectionString))
            {
                PrepareCommand(cmd, connection, 
null, cmdType, cmdText, commandParameters);
                object val 
= cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                
return val;
            }
        }

        
/// <summary>
        
/// 返回数据集DataSet
        
/// </summary>
        
/// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>
        
/// <param name="cmdText">存储过程名称或者sql命令语句</param>
        
/// <param name="commandParameters">执行命令所用参数的集合</param>
        
/// <returns>返回DataSet</returns>
        
public static DataSet ExecuteDataset(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            using (SqlConnection connection 
= new SqlConnection(connectionString))
            {
                SqlCommand cmd 
= new SqlCommand();
                PrepareCommand(cmd, connection, 
null, cmdType, cmdText, commandParameters);
                using (SqlDataAdapter da 
= new SqlDataAdapter(cmd))
                {
                    DataSet ds 
= new DataSet();
                    try
                    {
                        da.Fill(ds, "ds");
                        cmd.Parameters.Clear();
                    }
                    catch (System.Data.SqlClient.SqlException ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    finally
                    {
                        cmd.Dispose();
                        connection.
Close();
                    }
                    
return ds;
                }
            }
        }

        
/// <summary>
        
///  返回数据集DataSet
        
/// </summary>
        
/// <param name="int_PageSize"></param>
        
/// <param name="int_CurrentPageIndex"></param>
        
/// <param name="cmdType"></param>
        
/// <param name="cmdText"></param>
        
/// <param name="cmdParms"></param>
        
/// <returns></returns>
        
public static DataSet ExecuteDataset(int int_PageSize, int int_CurrentPageIndex, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            using (SqlConnection connection 
= new SqlConnection(connectionString))
            {
                SqlCommand cmd 
= new SqlCommand();
                PrepareCommand(cmd, connection, 
null, cmdType, cmdText, commandParameters);
                using (SqlDataAdapter da 
= new SqlDataAdapter(cmd))
                {
                    DataSet ds 
= new DataSet();
                    try
                    {
                        
if (int_PageSize == 0 && int_CurrentPageIndex == 0)
                        {
                            da.Fill(ds, "ds");
                        }
                        
else
                        {
                            
int int_Page = int_PageSize * (int_CurrentPageIndex - 1);
                            
if (int_Page < 0)
                            {
                                int_Page 
= 0;
                            }
                            da.Fill(ds, int_Page, int_PageSize, "ds");
                        }
                        cmd.Parameters.Clear();
                    }
                    catch (System.Data.SqlClient.SqlException ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    finally
                    {
                        cmd.Dispose();
                        connection.
Close();
                    }
                    
return ds;
                }
            }
        }
    }
posted @ 2008-04-03 13:14  love .net FrameWork  阅读(724)  评论(1编辑  收藏  举报