dataaccessor.cs

来自「ASP.NET的一些开发实例,有论坛管理系统等」· CS 代码 · 共 530 行

CS
530
字号
using System;
using System.Data;
using System.Data.OleDb;
using Service;

namespace Service
{
	/// <summary>
	/// OledbDataAccess 的摘要说明。
	/// </summary>
	public class DataAccessor
	{
		private static string ConStr;
		private System.Data.OleDb.OleDbConnection Conn;
		public	System.Data.OleDb.OleDbCommand Cmd;
		private System.Data.OleDb.OleDbTransaction Trans;
		public bool Result;

		/// <summary>
		/// 构造方法
		/// </summary>
		public DataAccessor()
		{
			if(ConStr == null)
			{
				ConStr = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
			}
			Conn = new System.Data.OleDb.OleDbConnection();
			Conn.ConnectionString = ConStr;
			Cmd = Conn.CreateCommand();

			Result = false;
		}

		/// <summary>
		/// 析构方法
		/// </summary>
		~DataAccessor()
		{
			if(this == null)
				return;
			this.Conn.Dispose();
		}

		/// <summary>
		/// 连接状态属性 State
		/// </summary>
		private System.Data.ConnectionState State
		{
			get
			{
				return Conn.State;
			}
		}


		/// <summary>
		/// Cmd字段的CommandType属性
		/// </summary>
		public System.Data.CommandType CmdType
		{
			get
			{
				return Cmd.CommandType;
			}
			set
			{
				Cmd.CommandType = value;
			}
		}

		
		/// <summary>
		/// 查询字符串属性 Sql
		/// </summary>
		public string Sql
		{
			get
			{
				return Cmd.CommandText;
			}
			set
			{
				Cmd.CommandText = value;
			}
		}




		/// <summary>
		/// 打开数据库连接
		/// </summary>
		/// <returns></returns>
		public bool Open()
		{
			try
			{
				Conn.Open();
				Trans = Conn.BeginTransaction();

				Cmd.Transaction = Trans;
				return true;
			}
			catch
			{
				return false;
			}
		}



		/// <summary>
		/// 提交或回滚事务并关闭数据库连接,所有使用本对象的方法最后必须执行此方法
		/// </summary>
		/// <returns></returns>
		public bool Close()
		{
			try
			{
				//提交或回滚事务
				if (this.Result == true)
				{
					Trans.Commit();
				}
				else
				{
					Trans.Rollback();
				}

				//关闭数据库连接
				if(Conn.State == System.Data.ConnectionState.Open)
				{
					Conn.Close();
				}
				return true;
			}
			catch
			{
				return false;
			}
		}



		/// <summary>
		/// 执行Cmd对象的ExecuteNonQuery()方法
		/// </summary>
		/// <returns></returns>
		public int ExecuteNonQuery()
		{
			//如果未打开连接则先打开连接
			if (this.State == System.Data.ConnectionState.Closed)
			{
				this.Open();
			}

			try
			{
				this.Result = true;
				return Cmd.ExecuteNonQuery();
			}
			catch
			{
				this.Result = false;
				return -1;
			}
			finally
			{
				Cmd.Parameters.Clear();
				CmdType = System.Data.CommandType.Text;
			}
		}





		/// <summary>
		/// 执行Cmd对象的ExecuteNonQuery()方法
		/// </summary>
		/// <param name="sql">执行数据库操作的SQL语句</param>
		/// <returns>返回受影响的行数,如果产生异常则返回-1</returns>
		public int ExecuteNonQuery(string sql)
		{
			//如果未打开连接则先打开连接
			if (this.State == System.Data.ConnectionState.Closed)
			{
				this.Open();
			}

			try
			{
				this.Sql = sql;
				this.Result = true;
				return Cmd.ExecuteNonQuery();
			}
			catch
			{
				this.Result = false;
				return -1;
			}
			finally
			{
				Cmd.Parameters.Clear();
				CmdType = System.Data.CommandType.Text;
			}
		}




		/// <summary>
		/// 执行Cmd对象的ExecuteReader()方法
		/// </summary>
		/// <returns></returns>
		public System.Data.OleDb.OleDbDataReader ExecuteReader()
		{
			//如果未打开连接则先打开连接
			if (this.State == System.Data.ConnectionState.Closed)
			{
				this.Open();
			}

			try
			{
				this.Result = true;
				return Cmd.ExecuteReader();
			}
			catch
			{
				this.Result = false;
				return null;
			}
			finally
			{
				Cmd.Parameters.Clear();
				CmdType = System.Data.CommandType.Text;
			}
		}



		/// <summary>
		/// 执行Cmd对象的ExecuteScalar()方法
		/// </summary>
		/// <returns></returns>
		public object ExecuteScalar()
		{
			//如果未打开连接则先打开连接
			if (this.State == System.Data.ConnectionState.Closed)
			{
				this.Open();
			}

			try
			{
				this.Result = true;
				return Cmd.ExecuteScalar();
			}
			catch
			{
				this.Result = false;
				return null;
			}
			finally
			{
				Cmd.Parameters.Clear();
				CmdType = System.Data.CommandType.Text;
			}
		}


		/// <summary>
		/// 执行Cmd对象的ExecuteScalar()方法
		/// </summary>
		/// <returns></returns>
		public object ExecuteScalar(string sql)
		{
			Sql = sql;
			return ExecuteScalar();
		}



		/// <summary>
		/// 查询SQL语句返回的结果个数
		/// </summary>
		/// <param name="column">列名</param>
		/// <param name="table">表名</param>
		/// <param name="condition">查询条件</param>
		/// <returns>结果个数</returns>
		public int ExecuteCount(string column, string table, string condition)
		{
			Sql = "Select count(" + column + ") From " + table + " Where " + condition;
			return int.Parse(this.ExecuteScalar().ToString());
		}
		

		/// <summary>
		/// 执行SQL语句
		/// </summary>
		/// <returns>DataTable类型的结果集</returns>
		public System.Data.DataTable ExecuteDataTable(string sql)
		{
			//如果未打开连接则先打开连接
			if (this.State == System.Data.ConnectionState.Closed)
			{
				this.Open();
			}

			//声明并创建一个用于保存数据的DataTable对象
			DataTable  theDT = new DataTable();

			try
			{
				//创建数据适配器对象
				this.Sql = sql;
				System.Data.OleDb.OleDbDataAdapter OleDA = new OleDbDataAdapter(this.Cmd);

				//调用数据适配器对象的Fill方法,将查询结果
				OleDA.Fill(theDT);

				//调用完毕,将数据管理器对象的Result属性置为true
				this.Result = true;

				return theDT;
			}
			catch(Exception e)
			{
				this.Result = false;

				Console.Write(e.Message);
				return null;
			}
			finally
			{
				Cmd.Parameters.Clear();
				CmdType = System.Data.CommandType.Text;
			}
		}


		/// <summary>
		/// 查询一条记录
		/// </summary>
		/// <param name="sql">查询语句</param>
		/// <returns>查询结果记录</returns>
		public DataRow ExecuteRecord(string sql)
		{
			return this.ExecuteDataTable(sql).Rows[0];
		}


		/// <summary>
		/// 查询新的主键值
		/// </summary>
		/// <param name="table">表名</param>
		/// <param name="key">主键列名</param>
		/// <returns>新的主键值</returns>
		public int GetNewID(string table, string key)
		{
			string sql = "Select Max("+ key + ")+1 From " + table;
			object result = this.ExecuteScalar(sql);
			if(result == DBNull.Value)
			{
				return 1;
			}
			else
			{
				return int.Parse(result.ToString());
			}
		}


		/// <summary>
		/// 查询一个值是否在数据库中
		/// </summary>
		/// <returns></returns>
		public bool ExecuteIfExist(string sql, RequestionType ReqType)
		{
			object obj = null;
			bool result = true;

			//如果未打开连接则先打开连接
			if (this.State == System.Data.ConnectionState.Closed)
			{
				this.Open();
			}

			this.Sql = sql;
			obj = Cmd.ExecuteScalar();

			try
			{
				this.Result = true;

				if(obj == null)																			//无查询结果
				{
					switch (ReqType)
					{
						case RequestionType.IfExist:
							result = false;
							break;
						case RequestionType.IsEmptyString:
							result = false;
							break;
						case RequestionType.IsNull:
							result = false;
							break;
						case RequestionType.NotEmpty:
							result = false;
							break;
						default:
							result = false;
							break;
					}
					return result;
				}
				else if(obj == System.DBNull.Value)											//如果查询结果是null
				{
					switch (ReqType)
					{
						case RequestionType.IfExist:
							result = true;
							break;
						case RequestionType.IsEmptyString:
							result = false;
							break;
						case RequestionType.IsNull:
							result = true;
							break;
						case RequestionType.NotEmpty:
							result = false;
							break;
						default:
							result = false;
							break;
					}
					return result;
				}
				else if (obj.ToString() == "")												//如果查询结果是空字符串
				{
					switch (ReqType)
					{
						case RequestionType.IfExist:
							result = true;
							break;
						case RequestionType.IsEmptyString:
							result = true;
							break;
						case RequestionType.IsNull:
							result = false;
							break;
						case RequestionType.NotEmpty:
							result = false;
							break;
						default:
							result = false;
							break;
					}
					return result;
				}
				else																		//如果查询结果是非空值
				{
					switch (ReqType)
					{
						case RequestionType.IfExist:
							result = true;
							break;
						case RequestionType.IsEmptyString:
							result = false;
							break;
						case RequestionType.IsNull:
							result = false;
							break;
						case RequestionType.NotEmpty:
							result = true;
							break;
						default:
							result = false;
							break;
					}
					return result;
				}
			}
			catch
			{
				return false;
			}
			finally
			{
				Cmd.Parameters.Clear();
				CmdType = System.Data.CommandType.Text;
			}
		}
	}

	// *******************************************************************************************

	/// <summary>
	/// 查询类型
	/// </summary>
	public enum RequestionType
	{
		/// <summary>
		/// 是否存在该值
		/// </summary>
		IfExist,

		/// <summary>
		/// 该值是否为空
		/// </summary>
		IsNull,

		/// <summary>
		/// 该值是否为空字符串
		/// </summary>
		IsEmptyString,

		/// <summary>
		/// 该值是否存在(非空,也非空值)
		/// </summary>
		NotEmpty

	}


}

⌨️ 快捷键说明

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