using
?System;
using ?System.Collections.Generic;
using ?System.Text;
using ?System.Data;
using ?System.Data.SqlClient;
using ?System.Collections;
namespace ?SystemDAO
{
???? /// ? <summary>
???? /// ?數(shù)據(jù)庫(kù)的通用訪(fǎng)問(wèn)代碼?蘇飛修改
???? /// ?
???? /// ?此類(lèi)為抽象類(lèi),
???? /// ?不允許實(shí)例化,在應(yīng)用時(shí)直接調(diào)用即可
???? /// ? </summary>
???? public ? abstract ? class ?SqlHelper
????{
???????? /// ? <summary>
???????? /// ?數(shù)據(jù)庫(kù)連接字符串
???????? /// ? </summary>
???????? public ? static ? readonly ? string ?connectionString? = ?System.Configuration.ConfigurationSettings.AppSettings[ " con " ].ToString().Trim();
???????? // ?Hashtable?to?store?cached?parameters
???????? private ? static ?Hashtable?parmCache? = ?Hashtable.Synchronized( new ?Hashtable());
???????? #region // ExecteNonQuery方法
???????? /// ? <summary>
???????? /// 執(zhí)行一個(gè)不需要返回值的SqlCommand命令,通過(guò)指定專(zhuān)用的連接字符串。
???????? /// ?使用參數(shù)數(shù)組形式提供參數(shù)列表?
???????? /// ? </summary>
???????? /// ? <param?name="connectionString"> 一個(gè)有效的數(shù)據(jù)庫(kù)連接字符串 </param>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)數(shù)值表示此SqlCommand命令執(zhí)行后影響的行數(shù) </returns>
???????? public ? static ? int ?ExecteNonQuery( string ?connectionString,?CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
????????????SqlCommand?cmd? = ? new ?SqlCommand();
???????????? using ?(SqlConnection?conn? = ? new ?SqlConnection(connectionString))
????????????{
???????????????? // 通過(guò)PrePareCommand方法將參數(shù)逐個(gè)加入到SqlCommand的參數(shù)集合中
????????????????PrepareCommand(cmd,?conn,? null ,?cmdType,?cmdText,?commandParameters);
???????????????? int ?val? = ?cmd.ExecuteNonQuery();
???????????????? // 清空SqlCommand中的參數(shù)列表
????????????????cmd.Parameters.Clear();
???????????????? return ?val;
????????????}
????????}
???????? /// ? <summary>
???????? /// 執(zhí)行一個(gè)不需要返回值的SqlCommand命令,通過(guò)指定專(zhuān)用的連接字符串。
???????? /// ?使用參數(shù)數(shù)組形式提供參數(shù)列表?
???????? /// ? </summary>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)數(shù)值表示此SqlCommand命令執(zhí)行后影響的行數(shù) </returns>
???????? public ? static ? int ?ExecteNonQuery(CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecteNonQuery(connectionString?,cmdType,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// 存儲(chǔ)過(guò)程專(zhuān)用
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)數(shù)值表示此SqlCommand命令執(zhí)行后影響的行數(shù) </returns>
???????? public ? static ? int ?ExecteNonQueryProducts( string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecteNonQuery(CommandType.StoredProcedure,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// Sql語(yǔ)句專(zhuān)用
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> T_Sql語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)數(shù)值表示此SqlCommand命令執(zhí)行后影響的行數(shù) </returns>
???????? public ? static ? int ?ExecteNonQueryText( string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecteNonQuery(CommandType.Text,?cmdText,?commandParameters);
????????}
???????? #endregion
???????? #region // GetTable方法
???????? /// ? <summary>
???????? /// ?執(zhí)行一條返回結(jié)果集的SqlCommand,通過(guò)一個(gè)已經(jīng)存在的數(shù)據(jù)庫(kù)連接
???????? /// ?使用參數(shù)數(shù)組提供參數(shù)
???????? /// ? </summary>
???????? /// ? <param?name="connecttionString"> 一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接 </param>
???????? /// ? <param?name="cmdTye"> SqlCommand命令類(lèi)型 </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)表集合(DataTableCollection)表示查詢(xún)得到的數(shù)據(jù)集 </returns>
???????? public ? static ?DataTableCollection?GetTable( string ?connecttionString,?CommandType?cmdTye,? string ?cmdText,?SqlParameter[]?commandParameters)
????????{
????????????SqlCommand?cmd? = ? new ?SqlCommand();
????????????DataSet?ds? = ? new ?DataSet();
???????????? using ?(SqlConnection?conn? = ? new ?SqlConnection(connecttionString))
????????????{
????????????????PrepareCommand(cmd,?conn,? null ,?cmdTye,?cmdText,?commandParameters);
????????????????SqlDataAdapter?adapter? = ? new ?SqlDataAdapter();
????????????????adapter.SelectCommand? = ?cmd;
????????????????adapter.Fill(ds);
????????????}
????????????DataTableCollection?table? = ?ds.Tables;
???????????? return ?table;
????????}
???????? /// ? <summary>
???????? /// ?執(zhí)行一條返回結(jié)果集的SqlCommand,通過(guò)一個(gè)已經(jīng)存在的數(shù)據(jù)庫(kù)連接
???????? /// ?使用參數(shù)數(shù)組提供參數(shù)
???????? /// ? </summary>
???????? /// ? <param?name="cmdTye"> SqlCommand命令類(lèi)型 </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)表集合(DataTableCollection)表示查詢(xún)得到的數(shù)據(jù)集 </returns>
???????? public ? static ?DataTableCollection?GetTable(CommandType?cmdTye,? string ?cmdText,?SqlParameter[]?commandParameters)
????????{
???????????? return ?GetTable(cmdTye,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// ?存儲(chǔ)過(guò)程專(zhuān)用
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)表集合(DataTableCollection)表示查詢(xún)得到的數(shù)據(jù)集 </returns>
???????? public ? static ?DataTableCollection?GetTableProducts( string ?cmdText,?SqlParameter[]?commandParameters)
????????{
???????????? return ?GetTable(CommandType.StoredProcedure,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// ?Sql語(yǔ)句專(zhuān)用
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> ?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)表集合(DataTableCollection)表示查詢(xún)得到的數(shù)據(jù)集 </returns>
???????? public ? static ?DataTableCollection?GetTableText( string ?cmdText,?SqlParameter[]?commandParameters)
????????{
???????????? return ?GetTable(CommandType.Text,?cmdText,?commandParameters);
????????}
???????? #endregion
???????? /// ? <summary>
???????? /// ?為執(zhí)行命令準(zhǔn)備參數(shù)
???????? /// ? </summary>
???????? /// ? <param?name="cmd"> SqlCommand?命令 </param>
???????? /// ? <param?name="conn"> 已經(jīng)存在的數(shù)據(jù)庫(kù)連接 </param>
???????? /// ? <param?name="trans"> 數(shù)據(jù)庫(kù)事物處理 </param>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> Command?text,T-SQL語(yǔ)句?例如?Select?*?from?Products </param>
???????? /// ? <param?name="cmdParms"> 返回帶參數(shù)的命令 </param>
???????? private ? static ? void ?PrepareCommand(SqlCommand?cmd,?SqlConnection?conn,?SqlTransaction?trans,?CommandType?cmdType,? string ?cmdText,?SqlParameter[]?cmdParms)
????????{
???????????? // 判斷數(shù)據(jù)庫(kù)連接狀態(tài)
???????????? if ?(conn.State? != ?ConnectionState.Open)
????????????????conn.Open();
????????????cmd.Connection? = ?conn;
????????????cmd.CommandText? = ?cmdText;
???????????? // 判斷是否需要事物處理
???????????? if ?(trans? != ? null )
????????????????cmd.Transaction? = ?trans;
????????????cmd.CommandType? = ?cmdType;
???????????? if ?(cmdParms? != ? null )
????????????{
???????????????? foreach ?(SqlParameter?parm? in ?cmdParms)
????????????????????cmd.Parameters.Add(parm);
????????????}
????????}
???????? /// ? <summary>
???????? /// ?Execute?a?SqlCommand?that?returns?a?resultset?against?the?database?specified?in?the?connection?string?
???????? /// ?using?the?provided?parameters.
???????? /// ? </summary>
???????? /// ? <param?name="connectionString"> 一個(gè)有效的數(shù)據(jù)庫(kù)連接字符串 </param>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> A?SqlDataReader?containing?the?results </returns>
???????? public ? static ?SqlDataReader?ExecuteReader( string ?connectionString,?CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
????????????SqlCommand?cmd? = ? new ?SqlCommand();
????????????SqlConnection?conn? = ? new ?SqlConnection(connectionString);
???????????? // ?we?use?a?try/catch?here?because?if?the?method?throws?an?exception?we?want?to?
???????????? // ?close?the?connection?throw?code,?because?no?datareader?will?exist,?hence?the?
???????????? // ?commandBehaviour.CloseConnection?will?not?work
???????????? try
????????????{
????????????????PrepareCommand(cmd,?conn,? null ,?cmdType,?cmdText,?commandParameters);
????????????????SqlDataReader?rdr? = ?cmd.ExecuteReader(CommandBehavior.CloseConnection);
????????????????cmd.Parameters.Clear();
???????????????? return ?rdr;
????????????}
???????????? catch
????????????{
????????????????conn.Close();
???????????????? throw ;
????????????}
????????}
???????? #region // ExecuteDataSet方法
???????? /// ? <summary>
???????? /// ?return?a?dataset
???????? /// ? </summary>
???????? /// ? <param?name="connectionString"> 一個(gè)有效的數(shù)據(jù)庫(kù)連接字符串 </param>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> return?a?dataset </returns>
???????? public ? static ?DataSet?ExecuteDataSet( string ?connectionString,?CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
????????????SqlConnection?conn? = ? new ?SqlConnection(connectionString);
????????????SqlCommand?cmd? = ? new ?SqlCommand();
???????????? try
????????????{
????????????????PrepareCommand(cmd,?conn,? null ,?cmdType,?cmdText,?commandParameters);
????????????????SqlDataAdapter?da? = ? new ?SqlDataAdapter();
????????????????DataSet?ds? = ? new ?DataSet();
????????????????da.SelectCommand? = ?cmd;
????????????????da.Fill(ds);
???????????????? return ?ds;
????????????}
???????????? catch
????????????{
????????????????conn.Close();
???????????????? throw ;
????????????}
????????}
???????? /// ? <summary>
???????? /// ?返回一個(gè)DataSet
???????? /// ? </summary>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> return?a?dataset </returns>
???????? public ? static ?DataSet?ExecuteDataSet(CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecuteDataSet(connectionString,?cmdType,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// ?返回一個(gè)DataSet
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> return?a?dataset </returns>
???????? public ? static ?DataSet?ExecuteDataSetProducts( string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecuteDataSet(connectionString,?CommandType.StoredProcedure,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// ?返回一個(gè)DataSet
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> return?a?dataset </returns>
???????? public ? static ?DataSet?ExecuteDataSetText( string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecuteDataSet(connectionString,?CommandType.Text,?cmdText,?commandParameters);
????????}
???????? public ? static ?DataView?ExecuteDataSet( string ?connectionString,? string ?sortExpression,? string ?direction,?CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
????????????SqlConnection?conn? = ? new ?SqlConnection(connectionString);
????????????SqlCommand?cmd? = ? new ?SqlCommand();
???????????? try
????????????{
????????????????PrepareCommand(cmd,?conn,? null ,?cmdType,?cmdText,?commandParameters);
????????????????SqlDataAdapter?da? = ? new ?SqlDataAdapter();
????????????????DataSet?ds? = ? new ?DataSet();
????????????????da.SelectCommand? = ?cmd;
????????????????da.Fill(ds);
????????????????DataView?dv? = ?ds.Tables[ 0 ].DefaultView;
????????????????dv.Sort? = ?sortExpression? + ? " ? " ? + ?direction;
???????????????? return ?dv;
????????????}
???????????? catch
????????????{
????????????????conn.Close();
???????????????? throw ;
????????????}
????????}
???????? #endregion
???????? #region ? // ?ExecuteScalar方法
???????? /// ? <summary>
???????? /// ?返回第一行的第一列
???????? /// ? </summary>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)對(duì)象 </returns>
???????? public ? static ? object ?ExecuteScalar(CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecuteScalar(SqlHelper.connectionString,?cmdType,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// ?返回第一行的第一列存儲(chǔ)過(guò)程專(zhuān)用
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)對(duì)象 </returns>
???????? public ? static ? object ?ExecuteScalarProducts( string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecuteScalar(SqlHelper.connectionString,?CommandType.StoredProcedure,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// ?返回第一行的第一列Sql語(yǔ)句專(zhuān)用
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> 者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)對(duì)象 </returns>
???????? public ? static ? object ?ExecuteScalarText( string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecuteScalar(SqlHelper.connectionString,?CommandType.Text,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// ?Execute?a?SqlCommand?that?returns?the?first?column?of?the?first?record?against?the?database?specified?in?the?connection?string?
???????? /// ?using?the?provided?parameters.
???????? /// ? </summary>
???????? /// ? <remarks>
???????? /// ?e.g.:??
???????? /// ??Object?obj?=?ExecuteScalar(connString,?CommandType.StoredProcedure,?"PublishOrders",?new?SqlParameter("@prodid",?24));
???????? /// ? </remarks>
???????? /// ? <param?name="connectionString"> 一個(gè)有效的數(shù)據(jù)庫(kù)連接字符串 </param>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> An?object?that?should?be?converted?to?the?expected?type?using?Convert.To{Type} </returns>
???????? public ? static ? object ?ExecuteScalar( string ?connectionString,?CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
????????????SqlCommand?cmd? = ? new ?SqlCommand();
???????????? using ?(SqlConnection?connection? = ? new ?SqlConnection(connectionString))
????????????{
????????????????PrepareCommand(cmd,?connection,? null ,?cmdType,?cmdText,?commandParameters);
???????????????? object ?val? = ?cmd.ExecuteScalar();
????????????????cmd.Parameters.Clear();
???????????????? return ?val;
????????????}
????????}
???????? /// ? <summary>
???????? /// ?Execute?a?SqlCommand?that?returns?the?first?column?of?the?first?record?against?an?existing?database?connection?
???????? /// ?using?the?provided?parameters.
???????? /// ? </summary>
???????? /// ? <remarks>
???????? /// ?e.g.:??
???????? /// ??Object?obj?=?ExecuteScalar(connString,?CommandType.StoredProcedure,?"PublishOrders",?new?SqlParameter("@prodid",?24));
???????? /// ? </remarks>
???????? /// ? <param?name="connectionString"> 一個(gè)有效的數(shù)據(jù)庫(kù)連接字符串 </param>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> An?object?that?should?be?converted?to?the?expected?type?using?Convert.To{Type} </returns>
???????? public ? static ? object ?ExecuteScalar(SqlConnection?connection,?CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
????????????SqlCommand?cmd? = ? new ?SqlCommand();
????????????PrepareCommand(cmd,?connection,? null ,?cmdType,?cmdText,?commandParameters);
???????????? object ?val? = ?cmd.ExecuteScalar();
????????????cmd.Parameters.Clear();
???????????? return ?val;
????????}
???????? #endregion
???????? /// ? <summary>
???????? /// ?add?parameter?array?to?the?cache
???????? /// ? </summary>
???????? /// ? <param?name="cacheKey"> Key?to?the?parameter?cache </param>
???????? /// ? <param?name="cmdParms"> an?array?of?SqlParamters?to?be?cached </param>
???????? public ? static ? void ?CacheParameters( string ?cacheKey,? params ?SqlParameter[]?commandParameters)
????????{
????????????parmCache[cacheKey]? = ?commandParameters;
????????}
???????? /// ? <summary>
???????? /// ?Retrieve?cached?parameters
???????? /// ? </summary>
???????? /// ? <param?name="cacheKey"> key?used?to?lookup?parameters </param>
???????? /// ? <returns> Cached?SqlParamters?array </returns>
???????? public ? static ?SqlParameter[]?GetCachedParameters( string ?cacheKey)
????????{
????????????SqlParameter[]?cachedParms? = ?(SqlParameter[])parmCache[cacheKey];
???????????? if ?(cachedParms? == ? null )
???????????????? return ? null ;
????????????SqlParameter[]?clonedParms? = ? new ?SqlParameter[cachedParms.Length];
???????????? for ?( int ?i? = ? 0 ,?j? = ?cachedParms.Length;?i? < ?j;?i ++ )
????????????????clonedParms[i]? = ?(SqlParameter)((ICloneable)cachedParms[i]).Clone();
???????????? return ?clonedParms;
????????}
???????? /// ? <summary>
???????? /// ?檢查是否存在
???????? /// ? </summary>
???????? /// ? <param?name="strSql"> Sql語(yǔ)句 </param>
???????? /// ? <returns> bool結(jié)果 </returns>
???????? public ? static ? bool ?Exists( string ?strSql)
????????{
???????????? int ?cmdresult? = ?Convert.ToInt32(ExecuteScalar(connectionString,?CommandType.Text,?strSql,? null ));
???????????? if ?(cmdresult? == ? 0 )
????????????{
???????????????? return ? false ;
????????????}
???????????? else
????????????{
???????????????? return ? true ;
????????????}
????????}
???????? /// ? <summary>
???????? /// ?檢查是否存在
???????? /// ? </summary>
???????? /// ? <param?name="strSql"> Sql語(yǔ)句 </param>
???????? /// ? <param?name="cmdParms"> 參數(shù) </param>
???????? /// ? <returns> bool結(jié)果 </returns>
???????? public ? static ? bool ?Exists( string ?strSql,? params ?SqlParameter[]?cmdParms)
????????{
???????????? int ?cmdresult? = ?Convert.ToInt32(ExecuteScalar(connectionString,?CommandType.Text,?strSql,?cmdParms));
???????????? if ?(cmdresult? == ? 0 )
????????????{
???????????????? return ? false ;
????????????}
???????????? else
????????????{
???????????????? return ? true ;
????????????}
????????}
????}
}
using ?System.Collections.Generic;
using ?System.Text;
using ?System.Data;
using ?System.Data.SqlClient;
using ?System.Collections;
namespace ?SystemDAO
{
???? /// ? <summary>
???? /// ?數(shù)據(jù)庫(kù)的通用訪(fǎng)問(wèn)代碼?蘇飛修改
???? /// ?
???? /// ?此類(lèi)為抽象類(lèi),
???? /// ?不允許實(shí)例化,在應(yīng)用時(shí)直接調(diào)用即可
???? /// ? </summary>
???? public ? abstract ? class ?SqlHelper
????{
???????? /// ? <summary>
???????? /// ?數(shù)據(jù)庫(kù)連接字符串
???????? /// ? </summary>
???????? public ? static ? readonly ? string ?connectionString? = ?System.Configuration.ConfigurationSettings.AppSettings[ " con " ].ToString().Trim();
???????? // ?Hashtable?to?store?cached?parameters
???????? private ? static ?Hashtable?parmCache? = ?Hashtable.Synchronized( new ?Hashtable());
???????? #region // ExecteNonQuery方法
???????? /// ? <summary>
???????? /// 執(zhí)行一個(gè)不需要返回值的SqlCommand命令,通過(guò)指定專(zhuān)用的連接字符串。
???????? /// ?使用參數(shù)數(shù)組形式提供參數(shù)列表?
???????? /// ? </summary>
???????? /// ? <param?name="connectionString"> 一個(gè)有效的數(shù)據(jù)庫(kù)連接字符串 </param>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)數(shù)值表示此SqlCommand命令執(zhí)行后影響的行數(shù) </returns>
???????? public ? static ? int ?ExecteNonQuery( string ?connectionString,?CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
????????????SqlCommand?cmd? = ? new ?SqlCommand();
???????????? using ?(SqlConnection?conn? = ? new ?SqlConnection(connectionString))
????????????{
???????????????? // 通過(guò)PrePareCommand方法將參數(shù)逐個(gè)加入到SqlCommand的參數(shù)集合中
????????????????PrepareCommand(cmd,?conn,? null ,?cmdType,?cmdText,?commandParameters);
???????????????? int ?val? = ?cmd.ExecuteNonQuery();
???????????????? // 清空SqlCommand中的參數(shù)列表
????????????????cmd.Parameters.Clear();
???????????????? return ?val;
????????????}
????????}
???????? /// ? <summary>
???????? /// 執(zhí)行一個(gè)不需要返回值的SqlCommand命令,通過(guò)指定專(zhuān)用的連接字符串。
???????? /// ?使用參數(shù)數(shù)組形式提供參數(shù)列表?
???????? /// ? </summary>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)數(shù)值表示此SqlCommand命令執(zhí)行后影響的行數(shù) </returns>
???????? public ? static ? int ?ExecteNonQuery(CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecteNonQuery(connectionString?,cmdType,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// 存儲(chǔ)過(guò)程專(zhuān)用
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)數(shù)值表示此SqlCommand命令執(zhí)行后影響的行數(shù) </returns>
???????? public ? static ? int ?ExecteNonQueryProducts( string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecteNonQuery(CommandType.StoredProcedure,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// Sql語(yǔ)句專(zhuān)用
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> T_Sql語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)數(shù)值表示此SqlCommand命令執(zhí)行后影響的行數(shù) </returns>
???????? public ? static ? int ?ExecteNonQueryText( string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecteNonQuery(CommandType.Text,?cmdText,?commandParameters);
????????}
???????? #endregion
???????? #region // GetTable方法
???????? /// ? <summary>
???????? /// ?執(zhí)行一條返回結(jié)果集的SqlCommand,通過(guò)一個(gè)已經(jīng)存在的數(shù)據(jù)庫(kù)連接
???????? /// ?使用參數(shù)數(shù)組提供參數(shù)
???????? /// ? </summary>
???????? /// ? <param?name="connecttionString"> 一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接 </param>
???????? /// ? <param?name="cmdTye"> SqlCommand命令類(lèi)型 </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)表集合(DataTableCollection)表示查詢(xún)得到的數(shù)據(jù)集 </returns>
???????? public ? static ?DataTableCollection?GetTable( string ?connecttionString,?CommandType?cmdTye,? string ?cmdText,?SqlParameter[]?commandParameters)
????????{
????????????SqlCommand?cmd? = ? new ?SqlCommand();
????????????DataSet?ds? = ? new ?DataSet();
???????????? using ?(SqlConnection?conn? = ? new ?SqlConnection(connecttionString))
????????????{
????????????????PrepareCommand(cmd,?conn,? null ,?cmdTye,?cmdText,?commandParameters);
????????????????SqlDataAdapter?adapter? = ? new ?SqlDataAdapter();
????????????????adapter.SelectCommand? = ?cmd;
????????????????adapter.Fill(ds);
????????????}
????????????DataTableCollection?table? = ?ds.Tables;
???????????? return ?table;
????????}
???????? /// ? <summary>
???????? /// ?執(zhí)行一條返回結(jié)果集的SqlCommand,通過(guò)一個(gè)已經(jīng)存在的數(shù)據(jù)庫(kù)連接
???????? /// ?使用參數(shù)數(shù)組提供參數(shù)
???????? /// ? </summary>
???????? /// ? <param?name="cmdTye"> SqlCommand命令類(lèi)型 </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)表集合(DataTableCollection)表示查詢(xún)得到的數(shù)據(jù)集 </returns>
???????? public ? static ?DataTableCollection?GetTable(CommandType?cmdTye,? string ?cmdText,?SqlParameter[]?commandParameters)
????????{
???????????? return ?GetTable(cmdTye,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// ?存儲(chǔ)過(guò)程專(zhuān)用
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)表集合(DataTableCollection)表示查詢(xún)得到的數(shù)據(jù)集 </returns>
???????? public ? static ?DataTableCollection?GetTableProducts( string ?cmdText,?SqlParameter[]?commandParameters)
????????{
???????????? return ?GetTable(CommandType.StoredProcedure,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// ?Sql語(yǔ)句專(zhuān)用
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> ?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)表集合(DataTableCollection)表示查詢(xún)得到的數(shù)據(jù)集 </returns>
???????? public ? static ?DataTableCollection?GetTableText( string ?cmdText,?SqlParameter[]?commandParameters)
????????{
???????????? return ?GetTable(CommandType.Text,?cmdText,?commandParameters);
????????}
???????? #endregion
???????? /// ? <summary>
???????? /// ?為執(zhí)行命令準(zhǔn)備參數(shù)
???????? /// ? </summary>
???????? /// ? <param?name="cmd"> SqlCommand?命令 </param>
???????? /// ? <param?name="conn"> 已經(jīng)存在的數(shù)據(jù)庫(kù)連接 </param>
???????? /// ? <param?name="trans"> 數(shù)據(jù)庫(kù)事物處理 </param>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> Command?text,T-SQL語(yǔ)句?例如?Select?*?from?Products </param>
???????? /// ? <param?name="cmdParms"> 返回帶參數(shù)的命令 </param>
???????? private ? static ? void ?PrepareCommand(SqlCommand?cmd,?SqlConnection?conn,?SqlTransaction?trans,?CommandType?cmdType,? string ?cmdText,?SqlParameter[]?cmdParms)
????????{
???????????? // 判斷數(shù)據(jù)庫(kù)連接狀態(tài)
???????????? if ?(conn.State? != ?ConnectionState.Open)
????????????????conn.Open();
????????????cmd.Connection? = ?conn;
????????????cmd.CommandText? = ?cmdText;
???????????? // 判斷是否需要事物處理
???????????? if ?(trans? != ? null )
????????????????cmd.Transaction? = ?trans;
????????????cmd.CommandType? = ?cmdType;
???????????? if ?(cmdParms? != ? null )
????????????{
???????????????? foreach ?(SqlParameter?parm? in ?cmdParms)
????????????????????cmd.Parameters.Add(parm);
????????????}
????????}
???????? /// ? <summary>
???????? /// ?Execute?a?SqlCommand?that?returns?a?resultset?against?the?database?specified?in?the?connection?string?
???????? /// ?using?the?provided?parameters.
???????? /// ? </summary>
???????? /// ? <param?name="connectionString"> 一個(gè)有效的數(shù)據(jù)庫(kù)連接字符串 </param>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> A?SqlDataReader?containing?the?results </returns>
???????? public ? static ?SqlDataReader?ExecuteReader( string ?connectionString,?CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
????????????SqlCommand?cmd? = ? new ?SqlCommand();
????????????SqlConnection?conn? = ? new ?SqlConnection(connectionString);
???????????? // ?we?use?a?try/catch?here?because?if?the?method?throws?an?exception?we?want?to?
???????????? // ?close?the?connection?throw?code,?because?no?datareader?will?exist,?hence?the?
???????????? // ?commandBehaviour.CloseConnection?will?not?work
???????????? try
????????????{
????????????????PrepareCommand(cmd,?conn,? null ,?cmdType,?cmdText,?commandParameters);
????????????????SqlDataReader?rdr? = ?cmd.ExecuteReader(CommandBehavior.CloseConnection);
????????????????cmd.Parameters.Clear();
???????????????? return ?rdr;
????????????}
???????????? catch
????????????{
????????????????conn.Close();
???????????????? throw ;
????????????}
????????}
???????? #region // ExecuteDataSet方法
???????? /// ? <summary>
???????? /// ?return?a?dataset
???????? /// ? </summary>
???????? /// ? <param?name="connectionString"> 一個(gè)有效的數(shù)據(jù)庫(kù)連接字符串 </param>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> return?a?dataset </returns>
???????? public ? static ?DataSet?ExecuteDataSet( string ?connectionString,?CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
????????????SqlConnection?conn? = ? new ?SqlConnection(connectionString);
????????????SqlCommand?cmd? = ? new ?SqlCommand();
???????????? try
????????????{
????????????????PrepareCommand(cmd,?conn,? null ,?cmdType,?cmdText,?commandParameters);
????????????????SqlDataAdapter?da? = ? new ?SqlDataAdapter();
????????????????DataSet?ds? = ? new ?DataSet();
????????????????da.SelectCommand? = ?cmd;
????????????????da.Fill(ds);
???????????????? return ?ds;
????????????}
???????????? catch
????????????{
????????????????conn.Close();
???????????????? throw ;
????????????}
????????}
???????? /// ? <summary>
???????? /// ?返回一個(gè)DataSet
???????? /// ? </summary>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> return?a?dataset </returns>
???????? public ? static ?DataSet?ExecuteDataSet(CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecuteDataSet(connectionString,?cmdType,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// ?返回一個(gè)DataSet
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> return?a?dataset </returns>
???????? public ? static ?DataSet?ExecuteDataSetProducts( string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecuteDataSet(connectionString,?CommandType.StoredProcedure,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// ?返回一個(gè)DataSet
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> return?a?dataset </returns>
???????? public ? static ?DataSet?ExecuteDataSetText( string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecuteDataSet(connectionString,?CommandType.Text,?cmdText,?commandParameters);
????????}
???????? public ? static ?DataView?ExecuteDataSet( string ?connectionString,? string ?sortExpression,? string ?direction,?CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
????????????SqlConnection?conn? = ? new ?SqlConnection(connectionString);
????????????SqlCommand?cmd? = ? new ?SqlCommand();
???????????? try
????????????{
????????????????PrepareCommand(cmd,?conn,? null ,?cmdType,?cmdText,?commandParameters);
????????????????SqlDataAdapter?da? = ? new ?SqlDataAdapter();
????????????????DataSet?ds? = ? new ?DataSet();
????????????????da.SelectCommand? = ?cmd;
????????????????da.Fill(ds);
????????????????DataView?dv? = ?ds.Tables[ 0 ].DefaultView;
????????????????dv.Sort? = ?sortExpression? + ? " ? " ? + ?direction;
???????????????? return ?dv;
????????????}
???????????? catch
????????????{
????????????????conn.Close();
???????????????? throw ;
????????????}
????????}
???????? #endregion
???????? #region ? // ?ExecuteScalar方法
???????? /// ? <summary>
???????? /// ?返回第一行的第一列
???????? /// ? </summary>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)對(duì)象 </returns>
???????? public ? static ? object ?ExecuteScalar(CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecuteScalar(SqlHelper.connectionString,?cmdType,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// ?返回第一行的第一列存儲(chǔ)過(guò)程專(zhuān)用
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)對(duì)象 </returns>
???????? public ? static ? object ?ExecuteScalarProducts( string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecuteScalar(SqlHelper.connectionString,?CommandType.StoredProcedure,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// ?返回第一行的第一列Sql語(yǔ)句專(zhuān)用
???????? /// ? </summary>
???????? /// ? <param?name="cmdText"> 者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> 返回一個(gè)對(duì)象 </returns>
???????? public ? static ? object ?ExecuteScalarText( string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
???????????? return ?ExecuteScalar(SqlHelper.connectionString,?CommandType.Text,?cmdText,?commandParameters);
????????}
???????? /// ? <summary>
???????? /// ?Execute?a?SqlCommand?that?returns?the?first?column?of?the?first?record?against?the?database?specified?in?the?connection?string?
???????? /// ?using?the?provided?parameters.
???????? /// ? </summary>
???????? /// ? <remarks>
???????? /// ?e.g.:??
???????? /// ??Object?obj?=?ExecuteScalar(connString,?CommandType.StoredProcedure,?"PublishOrders",?new?SqlParameter("@prodid",?24));
???????? /// ? </remarks>
???????? /// ? <param?name="connectionString"> 一個(gè)有效的數(shù)據(jù)庫(kù)連接字符串 </param>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> An?object?that?should?be?converted?to?the?expected?type?using?Convert.To{Type} </returns>
???????? public ? static ? object ?ExecuteScalar( string ?connectionString,?CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
????????????SqlCommand?cmd? = ? new ?SqlCommand();
???????????? using ?(SqlConnection?connection? = ? new ?SqlConnection(connectionString))
????????????{
????????????????PrepareCommand(cmd,?connection,? null ,?cmdType,?cmdText,?commandParameters);
???????????????? object ?val? = ?cmd.ExecuteScalar();
????????????????cmd.Parameters.Clear();
???????????????? return ?val;
????????????}
????????}
???????? /// ? <summary>
???????? /// ?Execute?a?SqlCommand?that?returns?the?first?column?of?the?first?record?against?an?existing?database?connection?
???????? /// ?using?the?provided?parameters.
???????? /// ? </summary>
???????? /// ? <remarks>
???????? /// ?e.g.:??
???????? /// ??Object?obj?=?ExecuteScalar(connString,?CommandType.StoredProcedure,?"PublishOrders",?new?SqlParameter("@prodid",?24));
???????? /// ? </remarks>
???????? /// ? <param?name="connectionString"> 一個(gè)有效的數(shù)據(jù)庫(kù)連接字符串 </param>
???????? /// ? <param?name="cmdType"> SqlCommand命令類(lèi)型?(存儲(chǔ)過(guò)程,?T-SQL語(yǔ)句,?等等。) </param>
???????? /// ? <param?name="cmdText"> 存儲(chǔ)過(guò)程的名字或者?T-SQL?語(yǔ)句 </param>
???????? /// ? <param?name="commandParameters"> 以數(shù)組形式提供SqlCommand命令中用到的參數(shù)列表 </param>
???????? /// ? <returns> An?object?that?should?be?converted?to?the?expected?type?using?Convert.To{Type} </returns>
???????? public ? static ? object ?ExecuteScalar(SqlConnection?connection,?CommandType?cmdType,? string ?cmdText,? params ?SqlParameter[]?commandParameters)
????????{
????????????SqlCommand?cmd? = ? new ?SqlCommand();
????????????PrepareCommand(cmd,?connection,? null ,?cmdType,?cmdText,?commandParameters);
???????????? object ?val? = ?cmd.ExecuteScalar();
????????????cmd.Parameters.Clear();
???????????? return ?val;
????????}
???????? #endregion
???????? /// ? <summary>
???????? /// ?add?parameter?array?to?the?cache
???????? /// ? </summary>
???????? /// ? <param?name="cacheKey"> Key?to?the?parameter?cache </param>
???????? /// ? <param?name="cmdParms"> an?array?of?SqlParamters?to?be?cached </param>
???????? public ? static ? void ?CacheParameters( string ?cacheKey,? params ?SqlParameter[]?commandParameters)
????????{
????????????parmCache[cacheKey]? = ?commandParameters;
????????}
???????? /// ? <summary>
???????? /// ?Retrieve?cached?parameters
???????? /// ? </summary>
???????? /// ? <param?name="cacheKey"> key?used?to?lookup?parameters </param>
???????? /// ? <returns> Cached?SqlParamters?array </returns>
???????? public ? static ?SqlParameter[]?GetCachedParameters( string ?cacheKey)
????????{
????????????SqlParameter[]?cachedParms? = ?(SqlParameter[])parmCache[cacheKey];
???????????? if ?(cachedParms? == ? null )
???????????????? return ? null ;
????????????SqlParameter[]?clonedParms? = ? new ?SqlParameter[cachedParms.Length];
???????????? for ?( int ?i? = ? 0 ,?j? = ?cachedParms.Length;?i? < ?j;?i ++ )
????????????????clonedParms[i]? = ?(SqlParameter)((ICloneable)cachedParms[i]).Clone();
???????????? return ?clonedParms;
????????}
???????? /// ? <summary>
???????? /// ?檢查是否存在
???????? /// ? </summary>
???????? /// ? <param?name="strSql"> Sql語(yǔ)句 </param>
???????? /// ? <returns> bool結(jié)果 </returns>
???????? public ? static ? bool ?Exists( string ?strSql)
????????{
???????????? int ?cmdresult? = ?Convert.ToInt32(ExecuteScalar(connectionString,?CommandType.Text,?strSql,? null ));
???????????? if ?(cmdresult? == ? 0 )
????????????{
???????????????? return ? false ;
????????????}
???????????? else
????????????{
???????????????? return ? true ;
????????????}
????????}
???????? /// ? <summary>
???????? /// ?檢查是否存在
???????? /// ? </summary>
???????? /// ? <param?name="strSql"> Sql語(yǔ)句 </param>
???????? /// ? <param?name="cmdParms"> 參數(shù) </param>
???????? /// ? <returns> bool結(jié)果 </returns>
???????? public ? static ? bool ?Exists( string ?strSql,? params ?SqlParameter[]?cmdParms)
????????{
???????????? int ?cmdresult? = ?Convert.ToInt32(ExecuteScalar(connectionString,?CommandType.Text,?strSql,?cmdParms));
???????????? if ?(cmdresult? == ? 0 )
????????????{
???????????????? return ? false ;
????????????}
???????????? else
????????????{
???????????????? return ? true ;
????????????}
????????}
????}
}
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
