您当前的位置: 首页 >  sql

SqlHelper

发布时间:2010-11-21 12:26:00 ,浏览量:0

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

namespace SqlServerDAL {     public sealed class SqlHelper     {         public static readonly string conn = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;           public static SqlTransaction getTran()         {             SqlConnection cn = new SqlConnection(SqlHelper.conn);

            SqlTransaction tran = null;             cn.Open();             tran = cn.BeginTransaction();             return tran;

        }         #region private utility methods & constructors         ///         /// 将命令和一组参数对象联系起来,给输出类型参数对象赋空值         ///         ///命令对象         ///参数数组         private static void AttachParameters(SqlCommand command, SqlParameter[] commandParameters)         {             foreach (SqlParameter par in commandParameters)             {                 if ((par.Direction == ParameterDirection.InputOutput) && (par.Value == null))                 {                     par.Value = DBNull.Value;                 }                 command.Parameters.Add(par);             }         }         ///         /// 对一组参数对象赋值         ///         ///参数对象         ///参数值         public static void AssignParameterValues(SqlParameter[] commandParameters, params object[] parameterValues)         {             if ((parameterValues == null) || (parameterValues == null))             {                 return;             }             if (commandParameters.Length != parameterValues.Length)             {                 throw new ArgumentException("parameter count does not match parameter value count..");             }             for (int i = 0, j = commandParameters.Length; i < j; i++)             {                 if (parameterValues[i] != null && (commandParameters[i].Direction == ParameterDirection.Input || commandParameters[i].Direction == ParameterDirection.InputOutput))                 {                     commandParameters[i].Value = parameterValues[i];                 }             }         }         ///         /// 对一组参数对象赋值         ///         ///         ///         public static void AssignParameterValues(SqlParameter[] commandParameters, Hashtable parameterValues)         {             if ((commandParameters == null) || (parameterValues == null))             {                 return;             }             if (commandParameters.Length != parameterValues.Count)             {                 throw new ArgumentException("parameter count does not mathc prameter value coount.");             } for (int i = 0, j = parameterValues.Count; i < j; i++)             {                 if (parameterValues[commandParameters[i].ParameterName] != null && (commandParameters[i].Direction == ParameterDirection.Input || commandParameters[i].Direction == ParameterDirection.InputOutput))                 {                     commandParameters[i].Value = parameterValues[commandParameters[i].ParameterName];                 }             }         }         ///         /// 将一组COMMAND相关对象关联         ///         ///         ///         ///         ///         ///         ///         private static void PrepareCommand(SqlCommand command, SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters)         {             if (connection.State != ConnectionState.Open)             {                 connection.Open();             }             command.CommandType = commandType;             command.CommandText = commandText;             command.Connection = connection;             if (transaction != null)             {

                command.Transaction = transaction;             }             if (commandParameters != null)             {                 AttachParameters(command, commandParameters);             }         }

        #endregion         #region ExecuteNonQuery         public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)         {             return ExecuteNonQuery(connectionString, commandType, commandText, (SqlParameter[])null);         }         public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)         {             using (SqlConnection cn = new SqlConnection(connectionString))             {                 cn.Open();                 return ExecuteNonQuery(cn, commandType, commandText, commandParameters);             }         }         public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)         {             if ((parameterValues != null) && (parameterValues.Length > 0))             {                 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);                 SqlHelper.AssignParameterValues(commandParameters, parameterValues);                 return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);             }             else             {                 return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);             }         }         public static int ExecuteNonQuery(string connectionString, string spName, Hashtable parameterValues)         {             if ((parameterValues != null) && (parameterValues.Count > 0))             {                 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);                 AssignParameterValues(commandParameters, parameterValues);                 return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);             }             else             {                 return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);             }         }         public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText)         {             return ExecuteNonQuery(connection, commandType, commandText, (SqlParameter[])null);         }         public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)         {             SqlCommand cmd = new SqlCommand();             PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters);             int retVal = cmd.ExecuteNonQuery();             cmd.Parameters.Clear();             return retVal;         }         public static int ExecuteNonQuery(SqlConnection connection, string spName, params object[] parameterValues)         {             if ((parameterValues != null) && (parameterValues.Length > 0))             {                 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);                 AssignParameterValues(commandParameters, parameterValues);                 return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);             }             else             {                 return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);             }         }         public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText)         {             return ExecuteNonQuery(transaction, commandType, commandText, (SqlParameter[])null);         }         public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)         {             SqlCommand cmd = new SqlCommand();             PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);             int retVal = cmd.ExecuteNonQuery();             cmd.Parameters.Clear();             return retVal;         }         public static int ExecuteNonQuery(SqlTransaction transaction, string spName, params object[] parameterValues)         {             if ((parameterValues != null) && (parameterValues.Length > 0))             {                 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);                 AssignParameterValues(commandParameters, parameterValues);                 return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);             }             else             {                 return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);             }         }         #endregion         #region ExecuteDataSet         public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)         {             return ExecuteDataset(connectionString, commandType, commandText, (SqlParameter[])null);         }         public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)         {             using (SqlConnection cn = new SqlConnection(connectionString))             {                 cn.Open();                 return ExecuteDataset(cn, commandType, commandText, commandParameters);             }         }         public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)         {             if ((parameterValues != null) && (parameterValues.Length > 0))             {                 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);                 AssignParameterValues(commandParameters, parameterValues);                 return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);             }             else             {                 return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);             }         }         public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText)         {             return ExecuteDataset(connection, commandType, commandText, (SqlParameter[])null);         }         public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)         {             SqlCommand cmd = new SqlCommand();             PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters);             SqlDataAdapter da = new SqlDataAdapter(cmd);             DataSet ds = new DataSet();             da.Fill(ds);             cmd.Parameters.Clear();             return ds;         }         public static DataSet ExecuteDataset(SqlConnection connection, string spName, params object[] parameterValues)         {             if ((parameterValues != null) && (parameterValues.Length > 0))             {                 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);                 AssignParameterValues(commandParameters, parameterValues);                 return ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);             }             else             {                 return ExecuteDataset(connection, CommandType.StoredProcedure, spName);             }         }         public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText)         {             return ExecuteDataset(transaction, commandType, commandText, (SqlParameter[])null);         }         public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)         {             SqlCommand cmd = new SqlCommand();             PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);             SqlDataAdapter da = new SqlDataAdapter(cmd);             DataSet ds = new DataSet();             da.Fill(ds);             cmd.Parameters.Clear();             return ds;         }         public static DataSet ExecuteDataset(SqlTransaction transaction, string spName, params object[] parameterValues)         {             if ((parameterValues != null) && (parameterValues.Length > 0))             {                 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);                 AssignParameterValues(commandParameters, parameterValues);                 return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);             }             else             {                 return ExecuteDataset(transaction, CommandType.StoredProcedure, spName);             }         }         #endregion         #region ExecuteReader         private enum sqlConnectionOwnership         {             Internal,             External         }         private static SqlDataReader ExecuteReader(SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters, sqlConnectionOwnership connectionOwnership)         {             SqlCommand cmd = new SqlCommand();             PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters);             SqlDataReader dr;             if (connectionOwnership == sqlConnectionOwnership.External)             {                 dr = cmd.ExecuteReader();             }             else             {                 dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);             }             cmd.Parameters.Clear();             return dr;         }         public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)         {             return ExecuteReader(connectionString, commandType, commandText, (SqlParameter[])null);         }         public static SqlDataReader ExecuteReader(string connectionstring, CommandType commandType, string commandText, params SqlParameter[] commandParameters)         {             SqlConnection cn = new SqlConnection(connectionstring);             cn.Open();             try             {                 return ExecuteReader(cn, null, commandType, commandText, commandParameters, sqlConnectionOwnership.Internal);             }             catch             {                 cn.Close();                 throw;             }         }         public static SqlDataReader ExecuteReader(string connectionstring, string spName, params object[] parameterValues)         {             if ((parameterValues != null) && (parameterValues.Length > 0))             {                 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionstring, spName);                 AssignParameterValues(commandParameters, parameterValues);                 return ExecuteReader(connectionstring, CommandType.StoredProcedure, spName, commandParameters);             }             else             {                 return ExecuteReader(connectionstring, CommandType.StoredProcedure, spName);             }         }         public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType commandType, string commandText)         {             return ExecuteReader(connection, commandType, commandText, (SqlParameter[])null);         }         public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)         {             return ExecuteReader(connection, (SqlTransaction)null, commandType, commandText, commandParameters, sqlConnectionOwnership.External);         }         public static SqlDataReader ExecuteReader(SqlConnection connection, string spName, params object[] parameterValues)         {             if ((parameterValues != null) && (parameterValues.Length > 0))             {                 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);                 AssignParameterValues(commandParameters, parameterValues);                 return ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);             }             else             {                 return ExecuteReader(connection, CommandType.StoredProcedure, spName);             }         }         public static SqlDataReader ExecuteReader(SqlTransaction transaction, CommandType commandType, string commandText)         {             return ExecuteReader(transaction, commandType, commandText, (SqlParameter[])null);         }         public static SqlDataReader ExecuteReader(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)         {             return ExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, sqlConnectionOwnership.External);         }         public static SqlDataReader ExecuteReader(SqlTransaction transaction, string spName, params object[] parameterValues)         {             if ((parameterValues != null) && (parameterValues.Length > 0))             {                 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);                 AssignParameterValues(commandParameters, parameterValues);                 return ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);             }             else             {                 return ExecuteReader(transaction, CommandType.StoredProcedure, spName);             }         }         #endregion         #region ExecuteScalar         public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText)         {             return ExecuteScalar(connectionString, commandType, commandText, (SqlParameter[])null);         }         public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)         {             using (SqlConnection cn = new SqlConnection(connectionString))             {                 cn.Open();                 return ExecuteScalar(cn, commandType, commandText, commandParameters);             }         }         public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)         {             if ((parameterValues != null) && (parameterValues.Length > 0))             {                 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);                 AssignParameterValues(commandParameters, parameterValues);                 return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);             }             else             {                 return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);             }         }         public static object ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText)         {             return ExecuteScalar(connection, commandType, commandText, (SqlParameter[])null);         }         public static object ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)         {             SqlCommand cmd = new SqlCommand();             PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters);             object retValue = cmd.ExecuteScalar();             cmd.Parameters.Clear();             return retValue;         }         public static object ExecuteScalar(SqlConnection connection, string spName, params object[] parameterValues)         {             if ((parameterValues != null) && (parameterValues.Length > 0))             {                 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection.ConnectionString, spName);                 AssignParameterValues(commandParameters, parameterValues);                 return ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);             }             else             {                 return ExecuteScalar(connection, CommandType.StoredProcedure, spName);             }         }         public static object ExecuteScalar(SqlTransaction transaction, CommandType commandType, string commandText)         {             return ExecuteScalar(transaction, commandType, commandText, (SqlParameter[])null);         }         public static object ExecuteScalar(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)         {             SqlCommand cmd = new SqlCommand();             PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters);             object retVal = cmd.ExecuteScalar();             cmd.Parameters.Clear();             return retVal;         }         public static object ExecuteScalar(SqlTransaction transaction, string spName, params object[] parameterValues)         {             if ((parameterValues != null) && (parameterValues.Length > 0))             {                 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection.ConnectionString, spName);                 AssignParameterValues(commandParameters, parameterValues);                 return ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);             }             else             {                 return ExecuteScalar(transaction, CommandType.StoredProcedure, spName);             }         }         #endregion     }     public sealed class SqlHelperParameterCache     {         #region private methods,variables,and conestructors         //类提供的都是静态方法,将默认构造函数设置为私有的以便阻止利用"new SqlHelperParameterCache()"来实例化类         private SqlHelperParameterCache() { }         //存储过程参数缓存导HashTable中         private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());         /**/         ///         /// resolve at run time the appropriate set of SqlParameters for a stored procedure         /// 在运行时得到一个存储过程的一系列参数信息         ///         ///a valid connection string for a SqlConnection         ///一个连接对象的有效连接串         ///the name of the stored procedure         ///存储过程名         ///是否有返回值参数         ///参数对象数组,存储过程的所有参数信息         private static SqlParameter[] DiscoverSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)         {             using (SqlConnection cn = new SqlConnection(connectionString))             {                 using (SqlCommand cmd = new SqlCommand(spName, cn))                 {                     cn.Open();                     cmd.CommandType = CommandType.StoredProcedure;                     //从sqlcommand指定的存储过程中检索信息,并填充指定的sqlcommand对象的Parameters集合中。                     SqlCommandBuilder.DeriveParameters(cmd);                     if (!includeReturnValueParameter)                     {                         //移除第一个参数对象,因为没有返回值,而默认情况下,第一个参数对象是返回值                         cmd.Parameters.RemoveAt(0);                     }                     SqlParameter[] discoveredParameters = new SqlParameter[cmd.Parameters.Count];                     cmd.Parameters.CopyTo(discoveredParameters, 0);                     return discoveredParameters;

                }             }         }

        //复制缓存参数数据(克隆)         private static SqlParameter[] CloneParameters(SqlParameter[] originalParameters)         {             SqlParameter[] clonedParameters = new SqlParameter[originalParameters.Length];             for (int i = 0; i < originalParameters.Length; i++)             {                 clonedParameters[i] = (SqlParameter)((ICloneable)originalParameters[i]).Clone();             }             return clonedParameters;         }         #endregion         #region caching functions         ///         ///将参数数组添加到缓存中         ///         ///有效的连接串         ///一个存储过名程名或者T-SQL命令         ///一个要被缓存的参数数组         public static void CacheParameterSet(string connectionString, string commandText, params SqlParameter[] commandParameters)         {             string hashKey = connectionString + ":" + commandText;             paramCache[hashKey] = commandParameters;         }         ///         /// 从缓存中获得参数对象数组         ///         ///有效的连接串         ///一个存储过程名或者T-SQL命令         ///一个参数对象数组         public static SqlParameter[] GetCachedParameterSet(string connectionString, string commandText)         {             string hashKey = connectionString + ":" + commandText;             SqlParameter[] cacheParameters = (SqlParameter[])paramCache[hashKey];             if (cacheParameters == null)             {                 //如果缓存中没有参数,返回空                 return null;             }             else             {                 //返回参数的副本                 return CloneParameters(cacheParameters);             }         }         #endregion         #region Parameter Discovery Functions         ///         /// 获得存储过程的参数集         ///         ///         /// 这个方法从数据库中获得信息,并将之存储在缓存,以便以后使用         ///         ///有效的连接串         ///一个存储过程名或者T-SQL命令         ///一个参数对象数组         public static SqlParameter[] GetSpParameterSet(string connectionString, string spName)         {             return GetSpParameterSet(connectionString, spName, false);         }

        ///         /// 获得存储过程的参数集         ///         ///         /// 这个方法从数据库中获得信息,并将之存储在缓存,以便之后的使用         ///         ///a valid connection string for a SqlConnection         ///the name of the stored procedure         ///a bool value indicating whether the return value parameter should be included in the results         ///an array of SqlParameters         ///有效的连接串         ///一个存储过程名         /// ///是否有返回值参数         ///一个参数对象数组         public static SqlParameter[] GetSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)         {             string hashKey = connectionString + ":" + spName + (includeReturnValueParameter ? ": include ReturnValue Parameter" : "");             SqlParameter[] cachedParameters;             cachedParameters = (SqlParameter[])paramCache[hashKey];             if (cachedParameters == null)             {                 cachedParameters = (SqlParameter[])(paramCache[hashKey] = DiscoverSpParameterSet(connectionString, spName, includeReturnValueParameter));

            }             return CloneParameters(cachedParameters);         }

        #endregion     } }

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    106485博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0531s