PetShop分析系列2-在数据访问层2-about sqlhelper
在上面的一版里,出现了Sqlhelper。究竟是什么呢?我们来看看究竟。我猜测应该是对数据库连接和断连接的类的再封装。
打开在DBUtility的sqlhelper.cs.一看,又是一群属性的定义:
public static readonly string ConnectionStringLocalTransaction = ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString;
public static readonly string ConnectionStringInventoryDistributedTransaction = ConfigurationManager.ConnectionStrings["SQLConnString2"].ConnectionString;
public static readonly string ConnectionStringOrderDistributedTransaction = ConfigurationManager.ConnectionStrings["SQLConnString3"].ConnectionString;
这里用的readonly,为什么呢?不明白~~~~
可以看看这个地址:http://www.dezai.cn/study/Article_Show.asp?ArticleID=5565
// 使用HASH去保存内存的元素
private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
//然后重新封装了sqlconnection的ExecuteNonQuery方法,这里又出现了一个PrepareCommand的方法。看看又封装了什么呢?
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) {
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);//把传递进去的元素数组逐个添加
}
public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {
SqlCommand cmd = new SqlCommand();
using (SqlConnection conn = new SqlConnection(connectionString)) {
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;//返回影响的行数
}//又使用了using方法,自动释放conn连接的内存,当{}里运行完了。
}
//后面又重载了改方法ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
//重新封装了sqlDataReader
public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connectionString);
try {
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch {
conn.Close();
throw;
}
}
最后这个类还通过CacheParameters,GetCachedParameters和前面的静态HASH变量,实现了一个缓存数组的方法。但总觉得很莫名奇妙。但是这个可以暂且不管。学习就是这样,有时候有不懂的可以绕着走。或许我们把整个数据库访问层看了一遍,这个就能看懂了。

浙公网安备 33010602011771号