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

📄 tsqldb.cs

📁 ASP.net网站开发四“酷”全书:新闻、论坛、电子商城、博客_源码
💻 CS
字号:
using System;
using System.Data;
using System.Data.SqlClient;

namespace _lib
{
	/// <summary>
	/// SQL Server数据库中对应的一个单独数据条目。
	/// 作者:张宁
	/// 建立:2004.9.29
	/// </summary>
	public class TSqlDBItem
	{
		private object FObject;	// 唯一的私有成员,存放转换前的原始数据

		public TSqlDBItem(object Obj)
		{
			FObject = Obj;
		}

		public override string ToString()
		{
			string Result = "";
			if (FObject!=null)
				Result = FObject.ToString();
			return Result;
		}

		public int ToInt()
		{
			int Result = 0;
			if ((FObject!=null)&&(FObject.ToString()!=""))
				Result = System.Convert.ToInt16(FObject);
			return Result;
		}

		public DateTime ToDateTime()
		{
			DateTime Result = DateTime.Now;
			if ((FObject!=null)&&(FObject.ToString()!=""))
				Result = System.Convert.ToDateTime(FObject);
			return Result;
		}
	}

	/// <summary>
	/// SQL Server数据库对象。
	/// 作者:张宁
	/// 建立:2004.7.1
	/// </summary>
	public class TSqlDB
	{
		public static readonly string ZeroUniqueID="{00000000-0000-0000-0000-000000000000}";	// 代表一个不存在的编号
		private string FConnString;
		private string FQueryString;
		private int FCurrIndex=0;	// 当前数据游标位置

		private System.Data.SqlClient.SqlConnection  FConnection;
		private System.Data.SqlClient.SqlCommand     FCommand;
		private System.Data.SqlClient.SqlDataAdapter FDataAdapter;
		private System.Data.DataSet                  FDataSet;

		#region 构造方法
		/// <summary>
		/// TSqlDB 的默认构造方法。
		/// 创建对象,不打开结果集,之后可以用OpenRset方法打开
		/// </summary>
		public TSqlDB()
		{
			FConnString= GetConnString();
			Initial("");
		}

		/// <summary>
		/// TSqlDB 的带查询的构造方法。
		/// 创建对象,打开查询对应的结果集
		/// </summary>
		public TSqlDB(string Query)
		{
			FConnString= GetConnString();
			Initial(Query);
		}
		#endregion

		#region 私有方法
		/// <summary>
		/// (静态)返回数据库连接串。
		/// </summary>
		protected static string GetConnString()
		{
			return System.Configuration.ConfigurationSettings.AppSettings["ConnStr"];
		}

		/// <summary>
		/// 初始化:建立连接、命令、适配器、结果集对象
		/// </summary>
		private void Initial(string init_sql)
		{
			FConnection = new SqlConnection(FConnString);
			FConnection.Open();

			FCommand = new SqlCommand();
			FCommand.Connection = FConnection;
			FCommand.CommandText = init_sql;
			FQueryString= init_sql;

			FDataAdapter = new SqlDataAdapter();
			FDataAdapter.SelectCommand = FCommand;
			//FDataAdapter.TableMappings.Add("Table","v_DBUser");

			FDataSet = new DataSet();
			if (init_sql.Length>0)
				FDataAdapter.Fill(FDataSet);
		}

		/// <summary>
		/// SQL串编码 --> 单引号 变为 两个单引号
		/// </summary>
		private static string sqlEncode(string sqlString)
		{
			string Result= "";
			for (int i=0; i<sqlString.Length; i++)
				Result+= (sqlString[i]=='\'' ? "\'\'" : sqlString[i]+"");
			return Result;
		}
		#endregion

		#region 公有属性
		public TSqlDBItem this[string index]	// 缺省索引器
		{
			get
			{
				object Result;
				try
				{
					Result = FDataSet.Tables[0].Rows[FCurrIndex][index];
				}
				catch (ArgumentException e)
				{
					Result = "无此字段名("+index+")<br>"+e.Message;
				}
				catch (Exception e)
				{
					Result = "结果集中无记录<br>"+e.Message;
				}
				return new TSqlDBItem(Result);
			}
		}

		public bool MoveNext()	// 向后移动数据游标
		{
			if (!EOF)
			{
				FCurrIndex++;
				return true;
			}
			return false;
		}

		public bool EOF	// 是否到达数据尾部
		{
			get
			{
				return FCurrIndex>=Rows.Count;
			}
		}

		public DataRowCollection Rows	// 标的行集
		{
			get
			{
				return FDataSet.Tables[0].Rows;
			}
		}

		public DataColumnCollection Columns	// 标的列集
		{
			get
			{
				return FDataSet.Tables[0].Columns;
			}
		}

		public DataView DataSource	// 提供一个可供利用的数据源
		{
			get
			{
				return FDataSet.Tables[0].DefaultView;
			}
		}
		#endregion

		#region 公有方法
		/// <summary>
		/// (静态)执行一个查询,返回受影响的行数。
		///         用于执行insert、update、delete。
		/// </summary>
		public static int ExecuteNonQuery(string Query)
		{
			int Result;

			SqlConnection myConnection = new SqlConnection(GetConnString());
			myConnection.Open();
			SqlCommand myCommand = new SqlCommand(Query, myConnection);
			Result= myCommand.ExecuteNonQuery();
			myConnection.Close();

			return Result;
		}

		/// <summary>
		/// (静态)执行一个查询,返回结果集中第一行的第一列。
		///         用于执行count()、sum()等统计函数。
		/// </summary>
		public static int ExecuteScalar(string Query)
		{
			Int32 Result;

			SqlConnection myConnection = new SqlConnection(GetConnString());
			myConnection.Open();
			SqlCommand myCommand = new SqlCommand(Query, myConnection);
			Result= (Int32)myCommand.ExecuteScalar();
			myConnection.Close();

			return Result;
		}

		/// <summary>
		/// 执行一个查询,返回受影响的行数。
		///         用于执行insert、update、delete。
		/// </summary>
		public int Execute(string Query)
		{
			int Result;

			FCommand.CommandText = Query;
			Result= FCommand.ExecuteNonQuery();
			FQueryString= Query;

			return Result;
		}

		/// <summary>
		/// 执行已有查询,返回受影响的行数,结果集装载到内置对象中。
		/// </summary>
		public int Reload()
		{
			int Result;

			FCommand.CommandText = FQueryString;
			Result= FDataAdapter.Fill(FDataSet);

			return Result;
		}

		/// <summary>
		/// 执行一个查询,返回受影响的行数,结果集装载到内置对象中。
		///         用于执行select。
		/// </summary>
		public int OpenRset(string Query)
		{
			int Result;

			FCommand.CommandText = Query;
			Result= FDataAdapter.Fill(FDataSet);
			FQueryString= Query;

			return Result;
		}

		/// <summary>
		/// 释放数据库连接。
		/// </summary>
		public void Free()
		{
			if (FDataSet!=null)
				FDataSet.Dispose();
			if (FConnection!=null)
			{
				FConnection.Close();
				FConnection.Dispose();
				FConnection= null;
			}
			if (FCommand!=null)
				FCommand.Dispose();
			if (FDataAdapter!=null)
				FDataAdapter.Dispose();
		}

		#endregion

	}
}

⌨️ 快捷键说明

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