2003SQLHelper

using  System;
using  System.Data;
using  System.Xml;
using  System.Data.SqlClient;
using  System.Collections;

namespace  SQLDataAccess
{
    
/// <summary>
    
/// The SqlHelper class is intended to encapsulate high performance, scalable best practices for 
    
/// common uses of SqlClient
    
/// </summary>

    public sealed class SqlHelper
    
{
    
        
/// <summary>
        
/// 连接字符串
        
/// </summary>

        public static string CONN_STRING = 
            System.Configuration.ConfigurationSettings.AppSettings[
"connstr"];
        
        
// 用户缓存参数。
        private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());

        
/// <summary>
        
/// 使用默认连接, 执行SQL语句,仅仅返回数据库受影响行数。
        
/// 所需参数:命令文本,参数列表。
        
/// </summary>
        
/// <param name="cmdText">命令文本</param>
        
/// <param name="cmdParms">参数列表</param>
        
/// <returns></returns>

        public static int ExecuteNonQuery(string cmdText, params SqlParameter[] cmdParms)
        
{
            SqlCommand cmd 
= new SqlCommand();

            
using (SqlConnection conn = new SqlConnection(CONN_STRING))
            
{
                PrepareCommand(cmd, conn, 
null, CommandType.Text, cmdText, cmdParms);
                
int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                
return val;
            }

        }


        
/// <summary>
        
/// 执行一个sql命令,仅仅返回数据库受影响行数。
        
/// 所需参数:连接字符串,命令类型,命令文本,参数列表。
        
/// </summary>
        
/// <param name="connString">连接字符串</param>
        
/// <param name="cmdType">命令类型</param>
        
/// <param name="cmdText">命令文本</param>
        
/// <param name="cmdParms">参数列表</param>
        
/// <returns>数据库受影响行数</returns>

        public static int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
        
{
            SqlCommand cmd 
= new SqlCommand();

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

        }


        
/// <summary>
        
/// 执行一个sql命令,仅仅返回数据库受影响行数。
        
/// 所需参数:连接对象,命令类型,命令文本,参数列表。
        
/// </summary>
        
/// <param name="conn">连接对象</param>
        
/// <param name="cmdType">命令类型</param>
        
/// <param name="cmdText">命令文本</param>
        
/// <param name="cmdParms">参数列表</param>
        
/// <returns>数据库受影响行数</returns>

        public static int ExecuteNonQuery(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
        
{
            SqlCommand cmd 
= new SqlCommand();

            PrepareCommand(cmd, conn, 
null, cmdType, cmdText, cmdParms);
            
int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            
return val;
        }


        
/// <summary>
        
/// 执行一个sql命令,仅仅返回数据库受影响行数。(用于需要事务的情况)
        
/// 所需参数:事务对象,命令类型,命令文本,参数列表。
        
/// </summary>
        
/// <param name="trans">事务对象</param>
        
/// <param name="cmdType">命令类型</param>
        
/// <param name="cmdText">命令文本</param>
        
/// <param name="cmdParms">参数列表</param>
        
/// <returns>数据库受影响行数</returns>

        public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
        
{
            SqlCommand cmd 
= new SqlCommand();
            PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);
            
int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            
return val;
        }

        
        
/// <summary>
        
/// 执行一个sql查询语句,返回DataReader对象。使用默认连接。
        
/// 所需参数:命令文本,参数列表。
        
/// </summary>
        
/// <param name="cmdText"></param>
        
/// <param name="cmdParms"></param>
        
/// <returns></returns>

        public static SqlDataReader ExecuteReader(string cmdText, params SqlParameter[] cmdParms)
        
{
            SqlCommand cmd 
= new SqlCommand();
            SqlConnection conn 
= new SqlConnection(CONN_STRING);

            
// 此处使用try/catch的原因:当出现异常时,也可以保证能关闭连接。
            try
            
{
                PrepareCommand(cmd, conn, 
null, CommandType.Text, cmdText, cmdParms);
                SqlDataReader rdr 
= cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                
return rdr;
            }

            
catch
            
{
                conn.Close();
                
throw;
            }

        }


        
/// <summary>
        
/// 执行一个sql查询命令,返回DataReader对象。
        
/// 所需参数:连接字符串,命令类型,命令文本,参数列表。
        
/// </summary>
        
/// <param name="connString">连接字符串</param>
        
/// <param name="cmdType">命令类型</param>
        
/// <param name="cmdText">命令文本</param>
        
/// <param name="cmdParms">参数列表</param>
        
/// <returns>查询的结果 DataReader对象</returns>

        public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
        
{
            SqlCommand cmd 
= new SqlCommand();
            SqlConnection conn 
= new SqlConnection(connString);

            
// 此处使用try/catch的原因:当出现异常时,也可以保证能关闭连接。
            try
            
{
                PrepareCommand(cmd, conn, 
null, cmdType, cmdText, cmdParms);
                SqlDataReader rdr 
= cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                
return rdr;
            }

            
catch
            
{
                conn.Close();
                
throw;
            }

        }

        
/// <summary>
        
/// 执行一个sql查询命令,返回DataReader对象。
        
/// 所需参数:连接对象,命令类型,命令文本,参数列表。
        
/// </summary>
        
/// <param name="conn">连接对象</param>
        
/// <param name="cmdType">命令类型</param>
        
/// <param name="cmdText">命令文本</param>
        
/// <param name="cmdParms">参数列表</param>
        
/// <returns></returns>

        public static SqlDataReader ExecuteReader(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
        
{
            SqlCommand cmd 
= new SqlCommand();

            PrepareCommand(cmd, conn, 
null, cmdType, cmdText, cmdParms);
            SqlDataReader rdr 
= cmd.ExecuteReader();
            cmd.Parameters.Clear();
            
return rdr;
        }


        
/// <summary>
        
/// 执行一个sql查询语句,返回查询结果的第一行第一列的值。使用默认连接
        
/// 所需参数:命令文本,参数列表。
        
/// </summary>
        
/// <param name="cmdText">命令文本</param>
        
/// <param name="cmdParms">参数列表</param>
        
/// <returns></returns>

        public static object ExecuteScalar(string cmdText, params SqlParameter[] cmdParms)
        
{
            SqlCommand cmd 
= new SqlCommand();

            
using (SqlConnection conn = new SqlConnection(CONN_STRING))
            
{
                PrepareCommand(cmd, conn, 
null, CommandType.Text, cmdText, cmdParms);
                
object val = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                
return val;
            }

        }



        
/// <summary>
        
/// 执行一个sql查询命令,返回查询结果的第一行第一列的值。
        
/// 所需参数:连接字符串,命令类型,命令文本,参数列表。
        
/// </summary>
        
/// <param name="connString">连接字符串</param>
        
/// <param name="cmdType">命令类型</param>
        
/// <param name="cmdText">命令文本</param>
        
/// <param name="cmdParms">参数列表</param>
        
/// <returns>查询结果的第一行第一列的值</returns>

        public static object ExecuteScalar(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
        
{
            SqlCommand cmd 
= new SqlCommand();

            
using (SqlConnection conn = new SqlConnection(connString))
            
{
                PrepareCommand(cmd, conn, 
null, cmdType, cmdText, cmdParms);
                
object val = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                
return val;
            }

        }

        
/// <summary>
        
/// 执行一个sql查询命令,返回查询结果的第一行第一列的值。
        
/// 所需参数:连接对象,命令类型,命令文本,参数列表。
        
/// </summary>
        
/// <param name="conn">连接对象</param>
        
/// <param name="cmdType">命令类型</param>
        
/// <param name="cmdText">命令文本</param>
        
/// <param name="cmdParms">参数列表</param>
        
/// <returns>查询结果的第一行第一列的值</returns>

        public static object ExecuteScalar(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
        
{
            SqlCommand cmd 
= new SqlCommand();

            PrepareCommand(cmd, conn, 
null, cmdType, cmdText, cmdParms);
            
object val = cmd.ExecuteScalar();
            cmd.Parameters.Clear();
            
return val;

        }

        
/// <summary>
        
/// 执行一个sql查询命令,返回查询结果的第一行第一列的值, 支持事务。
        
/// 所需参数:事务对象,命令类型,命令文本,参数列表。
        
/// </summary>
        
/// <param name="tran">事务对象</param>
        
/// <param name="cmdType">命令类型</param>
        
/// <param name="cmdText">命令文本</param>
        
/// <param name="cmdParms">参数列表</param>
        
/// <returns>查询结果的第一行第一列的值</returns>

        public static object ExecuteScalar(SqlTransaction tran, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
        
{
            SqlCommand cmd 
= new SqlCommand();

            PrepareCommand(cmd, tran.Connection, tran, cmdType, cmdText, cmdParms);
            
object val = cmd.ExecuteScalar();
            cmd.Parameters.Clear();
            
return val;

        }


        
/// <summary>
        
/// 执行一个SQL查询,填充DataTable
        
/// </summary>
        
/// <param name="cmdText"></param>
        
/// <param name="dt"></param>
        
/// <param name="cmdParms"></param>

        public static void FillDataTable(string cmdText, DataTable dt, params SqlParameter[] cmdParms)
        
{
            SqlCommand cmd 
= new SqlCommand();

            
using (SqlConnection conn = new SqlConnection(CONN_STRING))
            
{
                
                PrepareCommand(cmd, conn, 
null, CommandType.Text, cmdText, cmdParms);
                SqlDataAdapter ada 
= new SqlDataAdapter(cmd);
                ada.Fill(dt);
                ada.Dispose();
            }

        }



        
/// <summary>
        
/// 缓存一个参数数组。
        
/// </summary>
        
/// <param name="cacheKey">参数数组在缓存中的名称</param>
        
/// <param name="cmdParms">参数数组</param>

        public static void SetCacheParameters(string cacheKey, params SqlParameter[] cmdParms)
        
{
            parmCache[cacheKey] 
= cmdParms;
        }


        
/// <summary>
        
/// 从缓存中获取一个参数数组。
        
/// </summary>
        
/// <param name="cacheKey">参数数组在缓存中的名称</param>
        
/// <returns>参数数组的副本</returns>

        public static SqlParameter[] GetCachedParameters(string cacheKey)
        
{
            SqlParameter[] cachedParms 
= (SqlParameter[])parmCache[cacheKey];

            
if (cachedParms == null)
                
return null;

            
//克隆一个参数数组的原因:此处的操作会对获取的参数进行赋值操作。
            SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];

            
for (int i = 0, j = cachedParms.Length; i < j; i++)
                clonedParms[i] 
= (SqlParameter)((ICloneable)cachedParms[i]).Clone();

            
return clonedParms;
        }


        
/// <summary>
        
/// 准备一个可以执行的Sql命令对象。
        
/// </summary>
        
/// <param name="cmd">命令对象</param>
        
/// <param name="conn">连接对象</param>
        
/// <param name="trans">事务对象</param>
        
/// <param name="cmdType">命令类型</param>
        
/// <param name="cmdText">命令文本</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);
            }

        }
    
    }

}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值