微软提供的数据访问组件SqlHelperWord格式文档下载.docx
《微软提供的数据访问组件SqlHelperWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《微软提供的数据访问组件SqlHelperWord格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。
一、原程序:
//编号1usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Collections;
usingSystem.Data.SqlClient;
//编号2
/**////<
summary>
///数据库的通用访问代码
///此类为抽象类,不允许实例化,在应用时直接调用即可
///<
/summary>
publicabstractclassSqlHelper
...{
//获取数据库连接字符串,其属于静态变量且只读,项目中所有文档可以直接使用,但不能修改
//编号13
publicstaticreadonlystringConnectionStringLocalTransaction=
ConfigurationManager.ConnectionStrings["
connstring"
].ConnectionString;
//哈希表用来存储缓存的参数信息,哈希表可以存储任意类型的参数
//编号8
privatestaticHashtableparmCache=Hashtable.Synchronized(newHashtable());
//编号9
/**////<
///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
///使用参数数组形式提供参数列表
///<
remarks>
///使用示例:
/// intresult=ExecuteNonQuery(connString,CommandType.StoredProcedure,
/// "
PublishOrders"
newSqlParameter("
@prodid"
24));
/remarks>
paramname="
connectionString"
>
一个有效的数据库连接字符串<
/param>
commandType"
SqlCommand命令类型(存储过程,T-SQL语句,等等。
)
commandText"
存储过程的名字或者T-SQL语句<
commandParameters"
以数组形式提供SqlCommand命令中用到的参数列表
returns>
返回一个数值表示此SqlCommand命令执行后影响的行数<
/returns>
//编号3
publicstaticintExecuteNonQuery(stringconnectionString,CommandTypecmdType,
stringcmdText,paramsSqlParameter[]commandParameters)
...{
SqlCommandcmd=newSqlCommand();
//编号4
using(SqlConnectionconn=newSqlConnection(connectionString))
...{
//通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中
PrepareCommand(cmd,conn,null,cmdType,cmdText,commandParameters);
intval=cmd.ExecuteNonQuery();
//清空SqlCommand中的参数列表
cmd.Parameters.Clear();
//编号14
returnval;
}
}
///执行一条不返回结果的SqlCommand,通过一个已经存在的数据库连接
///使用参数数组提供参数
///intresult=ExecuteNonQuery(conn,CommandType.StoredProcedure,
///"
conn"
一个现有的数据库连接<
//编号5
publicstaticintExecuteNonQuery(SqlConnectionconnection,CommandTypecmdType,stringcmdText,paramsSqlParameter[]commandParameters)
PrepareCommand(cmd,connection,null,cmdType,cmdText,commandParameters);
intval=cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
returnval;
///执行一条不返回结果的SqlCommand,通过一个已经存在的数据库事物处理
/// intresult=ExecuteNonQuery(trans,CommandType.StoredProcedure,
trans"
一个存在的sql事物处理<
//编号12
publicstaticintExecuteNonQuery(SqlTransactiontrans,CommandTypecmdType,stringcmdText,paramsSqlParameter[]commandParameters)
PrepareCommand(cmd,trans.Connection,trans,cmdType,cmdText,commandParameters);
///执行一条返回结果集的SqlCommand命令,通过专用的连接字符串。
/// SqlDataReaderr=ExecuteReader(connString,CommandType.StoredProcedure,
返回一个包含结果的SqlDataReader<
publicstaticSqlDataReaderExecuteReader(stringconnectionString,CommandTypecmdType,stringcmdText,paramsSqlParameter[]commandParameters)
//编号7
SqlConnectionconn=newSqlConnection(connectionString);
//在这里使用try/catch处理是因为如果方法出现异常,则SqlDataReader就不存在,
//CommandBehavior.CloseConnection的语句就不会执行,触发的异常由catch捕获。
//关闭数据库连接,并通过throw再次引发捕捉到的异常。
try
SqlDataReaderrdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);
returnrdr;
catch
conn.Close();
throw;
///执行一条返回第一条记录第一列的SqlCommand命令,通过专用的连接字符串。
/// Objectobj=ExecuteScalar(connString,CommandType.StoredProcedure,
返回一个object类型的数据,可以通过Convert.To{Type}方法转换类型<
publicstaticobjectExecuteScalar(stringconnectionString,CommandTypecmdType,stringcmdText,paramsSqlParameter[]commandParameters)
using(SqlConnectionconnection=newSqlConnection(connectionString))
PrepareCommand(cmd,connection,null,cmdType,cmdText,commandParameters);
objectval=cmd.ExecuteScalar();
///执行一条返回第一条记录第一列的SqlCommand命令,通过已经存在的数据库连接。
/// Objectobj=ExecuteScalar(connString,CommandType.StoredProcedure,
一个已经存在的数据库连接<
返回一个object类型的数据,可以通过Convert.To{Type}方法转换类型
publicstaticobjectExecuteScalar(SqlConnectionconnection,CommandTypecmdType,stringcmdText,paramsSqlParameter[]commandParameters)
objectval=cmd.ExecuteScalar();
///缓存参数数组
cacheKey"
参数缓存的键值<
cmdParms"
被缓存的参数列表<
publicstaticvoidCacheParameters(stringcacheKey,paramsSqlParameter[]commandParameters)
//编号10
parmCache[cacheKey]=commandParameters;
///获取被缓存的参数
用于查找参数的KEY值<
返回缓存的参数数组<
publicstaticSqlParameter[]GetCachedParameters(stringcacheKey)
SqlParameter[]cachedParms=(SqlParameter[])parmCache[cacheKey];
if(cachedParms==null)
returnnull;
//新建一个参数的克隆列表
SqlParameter[]clonedParms=newSqlParameter[cachedParms.Length];
//通过循环为克隆参数列表赋值
for(inti=0,j=cachedParms.Length;
i<
j;
i++)
//使用clone方法复制参数列表中的参数
//编号11
clonedParms[i]=(SqlParameter)((ICloneable)cachedParms[i]).Clone();
returnclonedParms;
///为执行命令准备参数
cmd"
SqlCommand命令<
已经存在的数据库连接<
数据库事物处理<
cmdType"
SqlCommand命令类型(存储过程,T-SQL语句,等等。
)<
cmdText"
Commandtext,T-SQL语句例如Select*from
///Products<
返回带参数的命令<
//编号6
privatestaticvoidPrepareCommand(SqlCommandcmd,SqlConnectionconn,SqlTransactiontrans,CommandTypecmdType,stringcmdText,SqlParameter[]
cmdParms)
//判断数据库连接状态
if(conn.