Classe Database.cs

 

using System;

using System.Configuration;

using System.Data;

using System.Data.SqlClient;

using System.Collections;

 

namespace PetShop.Components {

      public abstract class Database {

            public static readonly string CONN_STRING1 = ConfigurationSettings.AppSettings["ConnString1"];

            public static readonly string CONN_STRING2 = ConfigurationSettings.AppSettings["ConnString2"];

           

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

 

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

                  }

            }

      }

}