www.pudn.com > AlumniWeb.rar > SQLHelper.cs


using System; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 
using System.Collections; 
 
namespace DBHelper 
{ 
	///  
	/// Summary description for SQLHelper. 
	///  
	public abstract class SQLHelper  
	{ 
		///  
		/// Execute a SqlCommand (that returns no resultset) against the database specified in the connection string  
		/// using the provided parameters. 
		///  
		///  
		/// e.g.:   
		///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); 
		///  
		/// a valid connection string for a SqlConnection 
		/// the CommandType (stored procedure, text, etc.) 
		/// the stored procedure name or T-SQL command 
		/// an array of SqlParamters used to execute the command 
		/// an int representing the number of rows affected by the command 
		public static int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)  
		{ 
			///定义数据库的SQLCommand  
			SqlCommand cmd = new SqlCommand(); 
 
			///创建数据库的Connection  
			using (SqlConnection conn = new SqlConnection(connString))  
			{ 
				///准备数据库参数 
				PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms); 
 
				//执行数据库操作 
				int val = cmd.ExecuteNonQuery(); 
				cmd.Parameters.Clear(); 
				return val; 
			} 
		} 
 
		///  
		/// Execute a SqlCommand (that returns no resultset) against an existing database connection  
		/// using the provided parameters. 
		///  
		///  
		/// e.g.:   
		///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); 
		///  
		/// an existing database connection 
		/// the CommandType (stored procedure, text, etc.) 
		/// the stored procedure name or T-SQL command 
		/// an array of SqlParamters used to execute the command 
		/// an int representing the number of rows affected by the command 
		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; 
		} 
 
		///  
		/// Execute a SqlCommand (that returns no resultset) using an existing SQL Transaction  
		/// using the provided parameters. 
		///  
		///  
		/// e.g.:   
		///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); 
		///  
		/// an existing sql transaction 
		/// the CommandType (stored procedure, text, etc.) 
		/// the stored procedure name or T-SQL command 
		/// an array of SqlParamters used to execute the command 
		/// an int representing the number of rows affected by the command 
		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; 
		} 
 
		///  
		/// Execute a SqlCommand that returns a resultset against the database specified in the connection string  
		/// using the provided parameters. 
		///  
		///  
		/// e.g.:   
		///  SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); 
		///  
		/// a valid connection string for a SqlConnection 
		/// the CommandType (stored procedure, text, etc.) 
		/// the stored procedure name or T-SQL command 
		/// an array of SqlParamters used to execute the command 
		/// A SqlDataReader containing the results 
		public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)  
		{ 
			SqlCommand cmd = new SqlCommand(); 
			SqlConnection conn = new SqlConnection(connString); 
 
			// we use a try/catch here because if the method throws an exception we want to  
			// close the connection throw code, because no datareader will exist, hence the  
			// commandBehaviour.CloseConnection will not work 
			try  
			{ 
				PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms); 
				SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
				cmd.Parameters.Clear(); 
				return rdr; 
			} 
			catch  
			{ 
				conn.Close(); 
				throw; 
			} 
		} 
		 
		///  
		/// Execute a SqlCommand that returns the first column of the first record against the database specified in the connection string  
		/// using the provided parameters. 
		///  
		///  
		/// e.g.:   
		///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); 
		///  
		/// a valid connection string for a SqlConnection 
		/// the CommandType (stored procedure, text, etc.) 
		/// the stored procedure name or T-SQL command 
		/// an array of SqlParamters used to execute the command 
		/// An object that should be converted to the expected type using Convert.To{Type} 
		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; 
			} 
		} 
 
		///  
		/// Execute a SqlCommand that returns the first column of the first record against an existing database connection  
		/// using the provided parameters. 
		///  
		///  
		/// e.g.:   
		///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); 
		///  
		/// an existing database connection 
		/// the CommandType (stored procedure, text, etc.) 
		/// the stored procedure name or T-SQL command 
		/// an array of SqlParamters used to execute the command 
		/// An object that should be converted to the expected type using Convert.To{Type} 
		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; 
		} 
 
		///  
		/// add parameter array to the cache 
		///  
		/// Key to the parameter cache 
		/// an array of SqlParamters to be cached 
		public static void CacheParameters(string cacheKey, params SqlParameter[] cmdParms)  
		{ 
			DBHelper.paramCache[cacheKey] = cmdParms; 
		} 
 
		///  
		/// Retrieve cached parameters 
		///  
		/// key used to lookup parameters 
		/// Cached SqlParamters array 
		public static SqlParameter[] GetCachedParameters(string cacheKey)  
		{ 
			SqlParameter[] cachedParms = (SqlParameter[])DBHelper.paramCache[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; 
		} 
 
		///  
		/// Prepare a command for execution 
		///  
		/// SqlCommand object 
		/// SqlConnection object 
		/// SqlTransaction object 
		/// Cmd type e.g. stored procedure or text 
		/// Command text, e.g. Select * from Products 
		/// SqlParameters to use in the command 
		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); 
			} 
		} 
	} 
}