www.pudn.com > UDS1.1_51aspx.rar > Database.cs


using System; 
using System.ComponentModel; 
using System.Collections; 
using System.Diagnostics; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 
 
namespace UDS.Components { 
	///  
	/// 通用的数据库处理类,通过ado.net与数据库连接 
	///  
	public class Database : IDisposable { 
		// 连接数据源 
		private SqlConnection con; 
		 
		///  
		/// 执行存储过程 
		///  
		/// 存储过程的名称 
		/// 返回存储过程返回值 
		public int RunProc(string procName) { 
			SqlCommand cmd = CreateCommand(procName, null); 
			cmd.ExecuteNonQuery(); 
			this.Close(); 
			return (int)cmd.Parameters["ReturnValue"].Value; 
		} 
 
		///  
		/// 执行存储过程 
		///  
		/// 存储过程名称 
		/// 存储过程所需参数 
		/// 返回存储过程返回值 
		public int RunProc(string procName, SqlParameter[] prams) { 
			SqlCommand cmd = CreateCommand(procName, prams); 
			cmd.ExecuteNonQuery(); 
			this.Close(); 
			return (int)cmd.Parameters["ReturnValue"].Value; 
		} 
 
		///  
		/// 执行存储过程 
		///  
		/// 存储过程的名称 
		/// 返回存储过程返回值 
		public void RunProc(string procName, out SqlDataReader dataReader) { 
			SqlCommand cmd = CreateCommand(procName, null); 
			dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); 
			//return (int)cmd.Parameters["ReturnValue"].Value; 
		} 
 
		///  
		/// 执行存储过程 
		///  
		/// 存储过程的名称 
		/// 存储过程所需参数 
		/// 存储过程所需参数 
		public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader) { 
			SqlCommand cmd = CreateCommand(procName, prams); 
			dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); 
			//return (int)cmd.Parameters["ReturnValue"].Value; 
		} 
		 
		///  
		/// 创建一个SqlCommand对象以此来执行存储过程 
		///  
		/// 存储过程的名称 
		/// 存储过程所需参数 
		/// 返回SqlCommand对象 
		private SqlCommand CreateCommand(string procName, SqlParameter[] prams) { 
			// 确认打开连接 
			Open(); 
 
			 
			SqlCommand cmd = new SqlCommand(procName, con); 
			cmd.CommandType = CommandType.StoredProcedure; 
 
			// 依次把参数传入存储过程 
			if (prams != null) { 
				foreach (SqlParameter parameter in prams) 
					cmd.Parameters.Add(parameter); 
			} 
			 
			// 加入返回参数 
			cmd.Parameters.Add( 
				new SqlParameter("ReturnValue", SqlDbType.Int, 4, 
				ParameterDirection.ReturnValue, false, 0, 0, 
				string.Empty, DataRowVersion.Default, null)); 
 
			return cmd; 
		} 
 
		///  
		/// 打开数据库连接. 
		///  
		private void Open() { 
			// 打开数据库连接 
			if (con == null) { 
				con = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);				 
			}				 
			if(con.State ==System.Data.ConnectionState.Closed) 
				con.Open(); 
 
		} 
 
		///  
		/// 关闭数据库连接 
		///  
		public void Close() { 
			if (con != null) 
				con.Close(); 
		} 
 
		///  
		/// 释放资源 
		///  
		public void Dispose() { 
			// 确认连接是否已经关闭 
			if (con != null) { 
				con.Dispose(); 
				con = null; 
			}				 
		} 
 
		///  
		/// 传入输入参数 
		///  
		/// 存储过程名称 
		/// 参数类型 
		/// 参数大小 
		/// 参数值 
		/// 新的 parameter 对象 
		public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value) { 
			return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value); 
		}		 
 
		///  
		/// 传入返回值参数 
		///  
		/// 存储过程名称 
		/// 参数类型 
		/// 参数大小 
		/// 新的 parameter 对象 
		public SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size) { 
			return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null); 
		}		 
 
		///  
		/// 传入返回值参数 
		///  
		/// 存储过程名称 
		/// 参数类型 
		/// 参数大小 
		/// 新的 parameter 对象 
		public SqlParameter MakeReturnParam(string ParamName, SqlDbType DbType, int Size)  
		{ 
			return MakeParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null); 
		}	 
	 
		///  
		/// 生成存储过程参数 
		///  
		/// 存储过程名称 
		/// 参数类型 
		/// 参数大小 
		/// 参数方向 
		/// 参数值 
		/// 新的 parameter 对象 
		public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value) { 
			SqlParameter param; 
 
			if(Size > 0) 
				param = new SqlParameter(ParamName, DbType, Size); 
			else 
				param = new SqlParameter(ParamName, DbType); 
 
			param.Direction = Direction; 
			if (!(Direction == ParameterDirection.Output && Value == null)) 
				param.Value = Value; 
 
			return param; 
		} 
	} 
}