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

📄 databaseoperate.cs

📁 一个经典的东东
💻 CS
字号:
using System;
using System.Data;
using System.Data.SqlClient;

namespace DataAccess
{
	/// <summary>
	/// DataBaseOperate 的摘要说明。
	/// 连接数据库函数(ConData)
	/// 释放数据资源函数(CloseDataBase(调用),Dispose(自动))
	/// 开始事务(StartTransation)
	/// 提交事务(Commit)
	/// </summary>
	public class DataBaseOperate:IDisposable
	{
		//定义连接
		private SqlConnection sqlconnection;
		//定义连接标识符来指示SqlConnection是否连接
		private bool IsSqlCon;
		//定义连接字符串
		private string strCon;
		//定义事务
		private SqlTransaction sqlTrans;
		//定义数据库执行语句类
		private SqlCommand sqlcom;
		//定义标识符事务是否开始
		private bool IsStartTrans;
		//定义数据适配器
		private SqlDataAdapter sqlda;


		/// <summary>
		/// 构造函数,为连接字符赋初值
		/// </summary>
		public DataBaseOperate()
		{
			//对连接字符赋值
			strCon="server=.;uid=sa;database=学生信息管理系统";
			//事务开始标识符为false
			IsStartTrans=false;
			//最初数据库连接标识符为false
			IsSqlCon=false;
		}


		/// <summary>
		/// 连接数据库
		/// </summary>
		/// <returns>成功返回true</returns>
		private bool ConData()
		{
			if(strCon!=null)
			{
				sqlconnection =new SqlConnection(strCon);
				try
				{
					sqlconnection.Open();
					//数据库连接成功标识符为true
					this.IsSqlCon=true;
				}
				catch(SqlException e)
				{
					throw e;
				}
				return true;
			}
			return false;
		}


		/// <summary>
		/// 关闭数据库,释放数据库资源
		/// </summary>
		/// <returns>成功返回true</returns>
		public bool CloseDataBase()
		{
			try
			{
				Dispose();
			}
			catch(Exception e)
			{
				throw e;
			}
			this.IsSqlCon=false;
			return true;
		}


		/// <summary>
		/// 开始事务处理功能,之后执行的全部数据库操作语句需要调用提交函数(Commit)生效
		/// </summary>
		public void StartTransation()
		{
			//若连接数据库失败抛出错误
			if(!this.ConData())
			{
				throw(new ApplicationException("数据库没有成功建立连接"));
			}
			//指定事务的隔离级别:在正在读取数据时保持共享锁,以避免脏读,
			//但是在事务结束之前可以更改数据,从而导致不可重复的读取或幻像数据
			sqlTrans=sqlconnection.BeginTransaction(IsolationLevel.ReadCommitted);
			//事务标识符为true
			IsStartTrans=true;
		}


		/// <summary>
		/// 提交当前事务,失败全部回滚
		/// </summary>
		/// <returns>成功提交返回true</returns>
		public bool Commit()
		{
			//如果没有开启事务功能,不做任何操作,直接返回成功
			if(!IsStartTrans)
			{
				return true;
			}
			//事务开启后,尝试提交事务
			try
			{
				sqlTrans.Commit();
			}
			catch(SqlException e)
			{
				sqlTrans.Rollback();
				throw e;
			}
			return true;
		}


		/// <summary>
		/// 执行数据库查询操作
		/// </summary>
		/// <param name="sql">查询sql语句</param>
		/// <param name="tablename">数据集表名</param>
		/// <returns>返回数据集</returns>
		public DataSet Search(string sql,string tablename)
		{
			if(!this.ConData())
			{
				throw(new ApplicationException("没有建立数据库连接"));
			}

			DataSet ds=new DataSet();
			try
			{
				this.sqlda=new SqlDataAdapter(sql,this.sqlconnection);
				this.sqlda.Fill(ds,tablename);
			}
			catch(SqlException ex)
			{
				throw ex;
			}
			finally
			{
				this.CloseDataBase();
			}
			return ds;
		}

		/// <summary>
		/// 执行数据库的操作,修改,删除等无有效返回值的操作
		/// </summary>
		/// <param name="sql">SQL语句</param>
		/// <returns>成功返回true</returns>
		public bool Execute(string sql)
		{
			if(!this.ConData())
			{
				throw(new ApplicationException("没有建立数据库连接"));
			}

			//开始事务
			this.StartTransation();
			this.sqlcom=new SqlCommand(sql,this.sqlconnection,this.sqlTrans);
			//sql语句执行的方式
			this.sqlcom.CommandType=System.Data.CommandType.Text;
			try
			{
				this.sqlcom.ExecuteNonQuery();
				return this.Commit();
			}
			catch(SqlException ex)
			{
				if(this.IsStartTrans)
				{
					this.sqlTrans.Rollback();
				}
				throw ex;
			}
		}

		#region IDisposable 成员

		//系统自动释放资源,相当于析构函数
		public void Dispose()
		{
			this.Dispose(true);
			GC.SuppressFinalize(true);
		}

		#endregion

		/// <summary>
		/// 重写系统释放资源函数Dispose
		/// </summary>
		/// <param name="disposing">传如参数接受用户的是否希望释放资源,true为是</param>
		public virtual void Dispose(bool disposing)
		{
			//判断用户是否希望释放资源,如果不是就直接返回
			if(!disposing)
			{
				return;
			}
			//如果是,就判断数据库是否连接,如果连接,就调用自定义CloseDateBase释放数据库资源
			if(!this.IsSqlCon)
			{
				this.CloseDataBase();
			}
		}
	}
}

⌨️ 快捷键说明

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