亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dataaccess.cs

?? c#源代碼.含金量重.
?? CS
?? 第 1 頁 / 共 2 頁
字號:
using System;
using System.IO ;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Web.Caching ;
using DocAdmin.COMMON ;

namespace DocAdmin.DAL
{
	/// <summary>
	/// DataAccess 的摘要說明。
	/// </summary>
	public class DataAccess
	{	

		private static SqlConnection _connection  ;
		private static SqlCommand _command  ;
		private static SqlDataAdapter _adapter ;
//		private static SqlCommand _command_ds  ;
//		private static SqlCommand _command_sl  ;

		//創建自己的Hashtable
		private static Hashtable myCache = Hashtable.Synchronized(new Hashtable());

		#region 初始化
		/// <summary>
		/// 初始化數據連接
		/// </summary>
		/// <returns>true:成功  false:失敗</returns>
		public static bool InitConn()
		{
			bool ret = true ;

			//獲取web.config中配置的數據連接字串
			string str_conn = DocAdminGlobals.ConnectionString ;
			if(str_conn != "")
				//初始化數據連接
				_connection = new SqlConnection(str_conn) ;
			else
			{
				//獲取字串失敗,寫日志
				Trace.Write("InitCommand","Error","從web.config獲取數據連接字串失敗.") ;

				ret = false ;
				return ret ;
			}

			//初始化命令
			_command = new SqlCommand() ;

			//為命令設置數據連接
			_command.Connection = _connection ;		

			//初始化數據適配器
            _adapter = new SqlDataAdapter() ;
						
			return ret ;
		}
		#endregion

		#region 參數賦值
		/// <summary>
		/// 將SQL參數隊列值賦給SQL命令(SQL語句或存儲過程)
		/// </summary>
		/// <param name="commandParameters">待指定給SQL命令的參數隊列</param>
		private static void AttachParameters(SqlParameter[] commandParameters)
		{
			foreach (SqlParameter p in commandParameters)
			{
				//給為null的輸出參數賦值
				if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))
				{
					p.Value = DBNull.Value;
				}
				
				_command.Parameters.Add(p);
			}
		}

		/// <summary>
		/// 將參數值序列賦值給對應的參數序列
		/// </summary>
		/// <param name="commandParameters">待賦值的參數序列</param>
		/// <param name="parameterValues">參數值序列</param>
		private static bool AssignParameterValues(SqlParameter[] commandParameters, object[] parameterValues)
		{
			bool ret = true ;

			if ((commandParameters == null) || (parameterValues == null)) 
			{
				//若參數為null,返回
				return ret;
			}

			// 參數數組長度與參數值數組長度需匹配
			if (commandParameters.Length != parameterValues.Length)
			{
				ret = false ;
				Trace.Write("AssignParameterValues","Error","參數個數和參數值個數不匹配.");
				return ret;
			}

			//循環為參數賦值
			//注意,參數與參數值在各自的序列中位置應當對應
			for (int i = 0, j = commandParameters.Length; i < j; i++)
			{
				commandParameters[i].Value = parameterValues[i];
			}

			return ret;
		}

		/// <summary>
		/// 為給定的SQL命令(SQL語句或存儲過程)打開數據連接,設置事務、命令名稱、命令類型等等
		/// 并為命令的參數賦值
		/// </summary>
		/// <param name="commandType">命令類型</param>
		/// <param name="commandText">存儲過程名或SQL語句</param>
		/// <param name="commandParameters">參數序列</param>
		private static void PrepareCommand(string commandText, SqlParameter[] commandParameters)
		{
			//若數據連接未打開,打開連接
			if (_connection.State != ConnectionState.Open)
			{
				_connection.Open();
			}			

			//設置command text (存儲過程名或其他SQL語句)
			_command.CommandText = commandText;			

			//指定命令類型(存儲過程或者其他SQL語句)
			_command.CommandType = CommandType.StoredProcedure;

			//為參數賦值
			if (commandParameters != null)
			{
				AttachParameters(commandParameters);
			}

			return;
		}
		#endregion

		#region 執行無查詢存儲過程
		/// <summary>
		/// 執行無查詢存儲過程
		/// </summary>
		/// <param name="commandText">存儲過程名</param>
		/// <param name="HasReturn">是否有返回值</param>
		/// <param name="commandParameters">參數值</param>
		/// <returns>返回執行結果</returns>
		private static int ExecuteNonQuery_in(string commandText,bool HasReturn, params SqlParameter[] commandParameters)
		{
			int result = -1 ;
			//創建并打開數據連接			
			if (_connection.State != ConnectionState.Open)
			{
				_connection.Open();
			}		
			
			_command.Connection = _connection ;
			PrepareCommand(commandText, commandParameters);

			//調用執行函數
			//執行命令
			try
			{
				result = _command.ExecuteNonQuery();
			}
			catch(Exception e)
			{
				//執行失敗
				//從異常中獲取失敗信息
				string msg = e.Message ;
				//調用寫日志方法
				Trace.Write("ExecuteNonQuery","Error",commandText+"|"+msg) ;
			}
			if(HasReturn)
			{
				result = (int)_command.Parameters["@RETURN_VALUE"].Value ;
			}				
			
			//清除參數
			_command.Parameters.Clear();

			//執行完畢后關閉連接
			_connection.Close() ;

			return result ;
		}
		
		/// <summary>
		/// 執行無返回值的存儲過程
		/// 注意參數值的順序需與存儲過程參數順序一致
		/// </summary>		
		/// <param name="spName">存儲過程名</param>
		/// <param name="parameterValues">參數值</param>
		/// <returns>執行結果</returns>
		public static int ExecuteNonQuery(string spName,bool hasReturns,params object[] parameterValues)
		{
			//如果有參數值, 先賦參數值再執行
			if ((parameterValues != null) && (parameterValues.Length > 0)) 
			{
				//獲取存儲過程參數
				SqlParameter[] commandParameters = GetSpParameters(spName,hasReturns);

				//為存儲過程參數設定參數值
				AssignParameterValues(commandParameters, parameterValues);

				//調用執行帶參數值的存儲過程方法
				return ExecuteNonQuery_in(spName,hasReturns, commandParameters);
			}
			//不帶參數
			else 
			{
				return ExecuteNonQuery_in(spName,hasReturns);
			}
		}
		#endregion

		#region 獲取存儲過程參數
		/// <summary>
		/// 獲取存儲過程參數數組
		/// </summary>
		/// <param name="spName">存儲過程名</param>
		/// <param name="hasReturn">是否包含返回類型的參數</param>
		/// <returns>參數數組</returns>
		private static SqlParameter[] GetSpParameterSet(string spName,bool hasReturn)
		{			
			using(SqlCommand cmd = new SqlCommand() )
			{
				//為命令指定連接
				cmd.Connection = _connection ;

				//如果數據連接未開啟,打開它
				if(_connection.State != ConnectionState.Open)
				{
					_connection.Open() ;
				}
				//指定CommandText為存儲過程名
				cmd.CommandText = spName ;
				cmd.CommandType = CommandType.StoredProcedure ;
				//從存儲過程中檢索參數,填充到Parameters集
				try
				{
					SqlCommandBuilder.DeriveParameters(cmd) ;
				}
				catch(Exception e)
				{
					//執行失敗
					//從異常中獲取失敗信息
					string msg = e.Message ;
					//調用寫日志方法
					Trace.Write("DeriveParameters","Error",spName+"|"+msg) ;
				}

				//如果有返回值
				if (!hasReturn) 
				{
					cmd.Parameters.RemoveAt(0);
				}

				//將Parameters集中的參數復制到參數數組
				SqlParameter[] para = new SqlParameter[cmd.Parameters.Count] ;
				cmd.Parameters.CopyTo(para,0) ;

				return para ;
			}
		}		

		/// <summary>
		/// 深拷貝緩存中的參數序列
		/// </summary>
		/// <param name="originalParameters">源參數序列</param>
		/// <returns>拷貝后的參數序列</returns>
		private static SqlParameter[] CloneParameters(SqlParameter[] originalParameters)
		{
			//深拷貝緩存中的參數序列
			SqlParameter[] clonedParameters = new SqlParameter[originalParameters.Length];

			for (int i = 0, j = originalParameters.Length; i < j; i++)
			{
				clonedParameters[i] = (SqlParameter)((ICloneable)originalParameters[i]).Clone();
			}

			return clonedParameters;
		}

		/// <summary>
		/// 獲取存儲過程參數
		/// </summary>
		/// <param name="spName">存儲過程名</param>
		/// <param name="hasReturn">是否包含返回值</param>
		/// <returns>返回參數序列</returns>
		public static SqlParameter[] GetSpParameters(string spName, bool hasReturn)
		{
			//緩存HashTable的主鍵
			string cacheKey = spName + (hasReturn ? ":hasReturn":"");
			//從Hachtable中獲取參數
			SqlParameter[] cachedParameters  = (SqlParameter[])myCache[cacheKey];
			if(cachedParameters == null)
			{		
				//如果Hachtable中沒有,調用獲取存儲過程參數數組方法
				cachedParameters = (SqlParameter[])(myCache[cacheKey] = GetSpParameterSet(spName,hasReturn)) ;
			}			

			return CloneParameters(cachedParameters);
		}
		#endregion

		#region 執行返回DataSet的存儲過程
		/// <summary>
		/// 執行返回DataSet的存儲過程
		/// </summary>
		/// <param name="commandType">命令類型,存儲過程、Text等</param>
		/// <param name="commandText">存儲過程名或SQL語句等</param>
		/// <param name="commandParameters">參數序列</param>
		/// <returns>查詢結果DataSet</returns>
		private static DataSet ExecuteDataset_in(string commandText, params SqlParameter[] commandParameters)
		{	
			//如果數據連接未開啟,打開它
			if (_connection.State != ConnectionState.Open)
			{
				_connection.Open();
			}

			//準備命令
			PrepareCommand(commandText, commandParameters);
			
			//創建DataAdapter和DataSet
			SqlDataAdapter da = new SqlDataAdapter(_command);
			DataSet ds = new DataSet();

			//填充DataSet
			try
			{
				da.Fill(ds);
			}
			catch(Exception e)
			{
				//執行失敗
				//從異常中獲取失敗信息
				string msg = e.Message ;
				//調用寫日志方法
				Trace.Write("FillDataSet","Error",commandText+"|"+msg) ;
			}
			
			// 清除參數		
			_command.Parameters.Clear();

			_connection.Close() ;

			return ds ;
		}

		/// <summary>
		/// 執行返回DataSet的存儲過程
		/// </summary>		
		/// <param name="spName">存儲過程名</param>
		/// <param name="parameterValues">參數值序列</param>
		/// <returns>查詢結果DataSet</returns>
		public static DataSet ExecuteDataset(string spName, params object[] parameterValues)
		{
			//如果有參數值, 先賦參數值再執行
			if ((parameterValues != null) && (parameterValues.Length > 0)) 
			{
				//獲取存儲過程參數

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一级二级三级| 精品一二三四区| 在线日韩av片| 亚洲一区二区三区小说| 欧美群妇大交群中文字幕| 蜜臀av性久久久久蜜臀aⅴ流畅| 91精品欧美综合在线观看最新 | 粉嫩嫩av羞羞动漫久久久| 久久精品这里都是精品| jiyouzz国产精品久久| 亚洲一区二区偷拍精品| 欧美一卡二卡在线| 高清不卡一区二区在线| 一区二区三区视频在线看| 在线不卡的av| 高清视频一区二区| 日韩理论片一区二区| 欧美午夜宅男影院| 狠狠网亚洲精品| 亚洲色图视频网| 欧美一区二区三区四区久久| 激情综合色播五月| 亚洲日本va午夜在线影院| 欧美日韩国产电影| 国产宾馆实践打屁股91| 一区二区久久久久久| 欧美一区二区成人6969| 99久久久无码国产精品| 男男视频亚洲欧美| 亚洲婷婷综合色高清在线| 欧美一区日本一区韩国一区| 国产91精品精华液一区二区三区 | 一区在线播放视频| 日韩欧美成人午夜| 色婷婷av一区二区| 激情另类小说区图片区视频区| 国产精品电影院| 欧美一区二区久久| 91麻豆国产福利精品| 国产一区免费电影| 香蕉久久夜色精品国产使用方法| 国产亚洲美州欧州综合国| 精品视频免费看| 9久草视频在线视频精品| 美洲天堂一区二卡三卡四卡视频 | 538在线一区二区精品国产| 岛国精品一区二区| 精品一区二区三区久久| 亚洲成人av中文| 日韩理论在线观看| 国产精品私人影院| 亚洲精品一线二线三线| 7777精品伊人久久久大香线蕉完整版 | 婷婷综合五月天| 亚洲精品久久久蜜桃| 国产人伦精品一区二区| 日韩三级在线免费观看| 欧美日韩日日摸| 日本精品裸体写真集在线观看| 国产精品一区二区不卡| 美女国产一区二区| 日韩高清国产一区在线| 亚洲成人黄色小说| 一区二区三区资源| 亚洲伦理在线免费看| 中文字幕成人av| 国产视频一区二区三区在线观看| 日韩免费看的电影| 日韩写真欧美这视频| 欧美精选在线播放| 欧美日韩高清在线播放| 欧美日韩极品在线观看一区| 色天使色偷偷av一区二区| 91在线无精精品入口| 91视频一区二区| 色婷婷久久久久swag精品| 91在线视频网址| 色婷婷精品大视频在线蜜桃视频| 一本色道亚洲精品aⅴ| 91免费看片在线观看| 99视频一区二区| 日本大香伊一区二区三区| 欧美性视频一区二区三区| 欧美日韩精品是欧美日韩精品| 欧美卡1卡2卡| 日韩一区二区三区电影| 2欧美一区二区三区在线观看视频| 欧美成人乱码一区二区三区| 精品国产乱码久久久久久浪潮 | 久久久久国产一区二区三区四区 | 日韩欧美卡一卡二| 精品国精品自拍自在线| 中文在线资源观看网站视频免费不卡 | 欧美成人激情免费网| 久久久久国产精品麻豆| 国产精品久久三| 亚洲成人资源网| 激情av综合网| 91麻豆国产在线观看| 欧美色区777第一页| 欧美成人一区二区| 中文字幕一区二区三区精华液| 亚洲黄色免费网站| 麻豆高清免费国产一区| 不卡一区二区在线| 欧美乱熟臀69xxxxxx| 欧美mv日韩mv国产网站app| 亚洲国产精华液网站w| 亚洲一区在线视频观看| 久久99国产精品免费网站| 成人精品视频一区二区三区 | 欧美r级电影在线观看| 亚洲视频一二区| 免费人成精品欧美精品| 不卡视频在线看| 欧美一区二区精品久久911| 亚洲国产成人自拍| 亚洲成av人在线观看| 国产精品456| 91麻豆精品国产91久久久久久久久 | 国产专区欧美精品| 一本到一区二区三区| 精品久久人人做人人爰| 亚洲一区二区五区| 国产sm精品调教视频网站| 制服丝袜激情欧洲亚洲| 综合久久久久久| 精品写真视频在线观看| 欧美色中文字幕| 国产精品色在线观看| 久久国产精品99久久久久久老狼| 91亚洲精品乱码久久久久久蜜桃| 精品福利在线导航| 视频一区二区三区入口| 91美女在线看| 国产亚洲污的网站| 美女网站一区二区| 精品视频一区 二区 三区| 国产精品传媒入口麻豆| 国产精品一区二区视频| 欧美一二三四在线| 亚洲成人第一页| 91福利区一区二区三区| 国产精品污www在线观看| 久久国产尿小便嘘嘘尿| 欧美福利一区二区| 一区二区理论电影在线观看| av亚洲产国偷v产偷v自拍| 久久蜜桃av一区二区天堂| 美国毛片一区二区三区| 91精品国产一区二区| 天堂一区二区在线| 欧美日韩国产在线观看| 国产精品不卡视频| av电影在线观看完整版一区二区 | 国产精品嫩草久久久久| 国产精品一区二区免费不卡| 欧美mv日韩mv国产网站| 久久se这里有精品| 精品国精品国产尤物美女| 免费成人av在线| 精品少妇一区二区三区在线播放| 免费看欧美女人艹b| 欧美一区二区视频在线观看 | 国内精品国产成人国产三级粉色| 日韩女优电影在线观看| 日韩在线卡一卡二| 日韩亚洲电影在线| 精品中文字幕一区二区| 精品国产a毛片| 国产成人高清在线| 国产精品福利一区| 一本色道亚洲精品aⅴ| 亚洲综合激情另类小说区| 欧美日韩中文一区| 男女性色大片免费观看一区二区 | 欧美日本国产视频| 日本中文字幕一区二区有限公司| 777色狠狠一区二区三区| 老司机一区二区| 国产日韩精品一区二区浪潮av| 成人在线视频一区| 亚洲欧美国产毛片在线| 在线看不卡av| 日本欧美大码aⅴ在线播放| 精品欧美一区二区三区精品久久 | 99久久综合狠狠综合久久| 亚洲日本电影在线| 欧美福利视频一区| 国产精品伊人色| 亚洲嫩草精品久久| 欧美一级xxx| 成人av在线播放网站| 亚洲制服丝袜一区| 精品国产免费一区二区三区四区| youjizz国产精品| 午夜久久久影院| 国产精品免费丝袜| 337p亚洲精品色噜噜| 成人免费高清在线观看|