⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 database.cs

📁 一套OA系统,使用SQL Server为后台数据库ASP.NET C#语言开发
💻 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 {
	/// <summary>
	/// 通用的数据库处理类,通过ado.net与数据库连接
	/// </summary>
	public class Database : IDisposable {
		// 连接数据源
		private SqlConnection con;
		
		/// <summary>
		/// 执行存储过程
		/// </summary>
		/// <param name="procName">存储过程的名称</param>
		/// <returns>返回存储过程返回值</returns>
		public int RunProc(string procName) {
			SqlCommand cmd = CreateCommand(procName, null);
			cmd.ExecuteNonQuery();
			this.Close();
			return (int)cmd.Parameters["ReturnValue"].Value;
		}

		/// <summary>
		/// 执行存储过程
		/// </summary>
		/// <param name="procName">存储过程名称</param>
		/// <param name="prams">存储过程所需参数</param>
		/// <returns>返回存储过程返回值</returns>
		public int RunProc(string procName, SqlParameter[] prams) {
			SqlCommand cmd = CreateCommand(procName, prams);
			cmd.ExecuteNonQuery();
			this.Close();
			return (int)cmd.Parameters["ReturnValue"].Value;
		}

		/// <summary>
		/// 执行存储过程
		/// </summary>
		/// <param name="procName">存储过程的名称</param>
		/// <param name="dataReader">返回存储过程返回值</param>
		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;
		}

		/// <summary>
		/// 执行存储过程
		/// </summary>
		/// <param name="procName">存储过程的名称</param>
		/// <param name="prams">存储过程所需参数</param>
		/// <param name="dataReader">存储过程所需参数</param>
		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;
		}
		
		/// <summary>
		/// 创建一个SqlCommand对象以此来执行存储过程
		/// </summary>
		/// <param name="procName">存储过程的名称</param>
		/// <param name="prams">存储过程所需参数</param>
		/// <returns>返回SqlCommand对象</returns>
		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;
		}

		/// <summary>
		/// 打开数据库连接.
		/// </summary>
		private void Open() {
			// 打开数据库连接
			if (con == null) {
				con = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);				
			}				
			if(con.State ==System.Data.ConnectionState.Closed)
				con.Open();

		}

		/// <summary>
		/// 关闭数据库连接
		/// </summary>
		public void Close() {
			if (con != null)
				con.Close();
		}

		/// <summary>
		/// 释放资源
		/// </summary>
		public void Dispose() {
			// 确认连接是否已经关闭
			if (con != null) {
				con.Dispose();
				con = null;
			}				
		}

		/// <summary>
		/// 传入输入参数
		/// </summary>
		/// <param name="ParamName">存储过程名称</param>
		/// <param name="DbType">参数类型</param></param>
		/// <param name="Size">参数大小</param>
		/// <param name="Value">参数值</param>
		/// <returns>新的 parameter 对象</returns>
		public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value) {
			return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
		}		

		/// <summary>
		/// 传入返回值参数
		/// </summary>
		/// <param name="ParamName">存储过程名称</param>
		/// <param name="DbType">参数类型</param>
		/// <param name="Size">参数大小</param>
		/// <returns>新的 parameter 对象</returns>
		public SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size) {
			return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null);
		}		

		/// <summary>
		/// 传入返回值参数
		/// </summary>
		/// <param name="ParamName">存储过程名称</param>
		/// <param name="DbType">参数类型</param>
		/// <param name="Size">参数大小</param>
		/// <returns>新的 parameter 对象</returns>
		public SqlParameter MakeReturnParam(string ParamName, SqlDbType DbType, int Size) 
		{
			return MakeParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
		}	
	
		/// <summary>
		/// 生成存储过程参数
		/// </summary>
		/// <param name="ParamName">存储过程名称</param>
		/// <param name="DbType">参数类型</param>
		/// <param name="Size">参数大小</param>
		/// <param name="Direction">参数方向</param>
		/// <param name="Value">参数值</param>
		/// <returns>新的 parameter 对象</returns>
		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;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -