众里寻他千百度,蓦然回首,那人却在灯火阑珊处

来源:互联网 发布:知乎周刊百度云 编辑:程序博客网 时间:2024/04/20 22:29

好在找到了一个库作三层架构的;众里寻他千百度,蓦然回首,那人却在灯火阑珊处

要作就要作企业级的系统,要学就学好的范例;

微软的petshop的架构;

看来我要好好学习啊,等着天天向上啊!//===============================================================================
// This file is based on the Microsoft Data Access Application Block for .NET

//=============================================================================== 

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using PetShop.Utility;

namespace PetShop.SQLServerDAL {

 /// <summary>
 /// The SqlHelper class is intended to encapsulate high performance,
 /// scalable best practices for common uses of SqlClient.
 /// </summary>
 public abstract class SQLHelper {
  
  //Database connection strings
  public static readonly string CONN_STRING_NON_DTC = ConnectionInfo.DecryptDBConnectionString(ConfigurationSettings.AppSettings["SQLConnString1"]);
  public static readonly string CONN_STRING_DTC_INV = ConnectionInfo.DecryptDBConnectionString(ConfigurationSettings.AppSettings["SQLConnString2"]);  
  public static readonly string CONN_STRING_DTC_ORDERS = ConnectionInfo.DecryptDBConnectionString(ConfigurationSettings.AppSettings["SQLConnString3"]);
  
  // Hashtable to store cached parameters
  private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
 
  public static int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) {

   SqlCommand cmd = new SqlCommand();

   using (SqlConnection conn = new SqlConnection(connString)) {
    PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
    int val = cmd.ExecuteNonQuery();
    cmd.Parameters.Clear();
    return val;
   }
  }

  public static int ExecuteNonQuery(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) {

   SqlCommand cmd = new SqlCommand();

   PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
   int val = cmd.ExecuteNonQuery();
   cmd.Parameters.Clear();
   return val;
  }

  public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) {
   SqlCommand cmd = new SqlCommand();
   PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);
   int val = cmd.ExecuteNonQuery();
   cmd.Parameters.Clear();
   return val;
  }

  public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) {
   SqlCommand cmd = new SqlCommand();
   SqlConnection conn = new SqlConnection(connString);

   // 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, cmdParms);
    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    cmd.Parameters.Clear();
    return rdr;
   }catch {
    conn.Close();
    throw;
   }
  }
  
  public static object ExecuteScalar(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) {
   SqlCommand cmd = new SqlCommand();

   using (SqlConnection conn = new SqlConnection(connString)) {
    PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
    object val = cmd.ExecuteScalar();
    cmd.Parameters.Clear();
    return val;
   }
  }
  public static object ExecuteScalar(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) {
   
   SqlCommand cmd = new SqlCommand();

   PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
   object val = cmd.ExecuteScalar();
   cmd.Parameters.Clear();
   return val;
  }

  public static void CacheParameters(string cacheKey, params SqlParameter[] cmdParms) {
   parmCache[cacheKey] = cmdParms;
  }
  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;
  }

  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);
   }
  }
 }
}

原创粉丝点击