📄 databaseoperate.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 + -