Asp.net三層結構入門示例源碼>>SQLserver/SQLHelper.cs

 using System;
  2using System.Configuration;
  3using System.Data;
  4using System.Data.SqlClient;  5using System.Collections;
  6
  7namespace Logindemo.SQLserver
  8{
  9/// download from www.51aspx.com(51aspx.com)
10
11    /// <summary>
12    /// SqlHelper類是專門提供給廣大用戶用於高性能、可升級和最佳練習的sql數據操作
13    /// </summary>

14    public abstract class SqlHelper
15    {
16
17        //數據庫連接字符串
18        public static readonly string Con = System.Configuration.ConfigurationManager.AppSettings["SQLServer"];
19
20        // 用於緩存參數的HASH表
21        private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
22
23        /// <summary>
24        ///  給定連接的數據庫用假設參數執行一個sql命令(不返回數據集)
25        /// </summary>
26        /// <param name="connectionString">一個有效的連接字符串</param>
27        /// <param name="commandType">命令類型(存儲過程, 文本, 等等)</param>
28        /// <param name="commandText">存儲過程名稱或者sql命令語句</param>
29        /// <param name="commandParameters">執行命令所用參數的集合</param>
30        /// <returns>執行命令所影響的行數</returns>

31        public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
32        {
33
34            SqlCommand cmd = new SqlCommand();
35
36            using (SqlConnection conn = new SqlConnection(connectionString))
37            {
38                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
39                int val = cmd.ExecuteNonQuery();
40                cmd.Parameters.Clear();
41                return val;
42            }

43        }

44
45        /// <summary>
46        /// 用現有的數據庫連接執行一個sql命令(不返回數據集)
47        /// </summary>
48        /// <param name="conn">一個現有的數據庫連接</param>
49        /// <param name="commandType">命令類型(存儲過程, 文本, 等等)</param>
50        /// <param name="commandText">存儲過程名稱或者sql命令語句</param>
51        /// <param name="commandParameters">執行命令所用參數的集合</param>
52        /// <returns>執行命令所影響的行數</returns>

53        public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
54        {
55
56            SqlCommand cmd = new SqlCommand();
57
58            PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
59            int val = cmd.ExecuteNonQuery();
60            cmd.Parameters.Clear();
61            return val;
62        }

63
64        /// <summary>
65        ///使用現有的SQL事務執行一個sql命令(不返回數據集)
66        /// </summary>
67        /// <remarks>
68        ///舉例: 
69        ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
70        /// </remarks>
71        /// <param name="trans">一個現有的事務</param>
72        /// <param name="commandType">命令類型(存儲過程, 文本, 等等)</param>
73        /// <param name="commandText">存儲過程名稱或者sql命令語句</param>
74        /// <param name="commandParameters">執行命令所用參數的集合</param>
75        /// <returns>執行命令所影響的行數</returns>

76        public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
77        {
78            SqlCommand cmd = new SqlCommand();
79            PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
80            int val = cmd.ExecuteNonQuery();
81            cmd.Parameters.Clear();
82            return val;
83        }

84
85        /// <summary>
86        /// 用執行的數據庫連接執行一個返回數據集的sql命令
87        /// </summary>
88        /// <remarks>
89        /// 舉例: 
90        ///  SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
91        /// </remarks>
92        /// <param name="connectionString">一個有效的連接字符串</param>
93        /// <param name="commandType">命令類型(存儲過程, 文本, 等等)</param>
94        /// <param name="commandText">存儲過程名稱或者sql命令語句</param>
95        /// <param name="commandParameters">執行命令所用參數的集合</param>
96        /// <returns>包含結果的讀取器</returns>

97        public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
98        {
99            //創建一個SqlCommand對象
100            SqlCommand cmd = new SqlCommand();
101            //創建一個SqlConnection對象
102            SqlConnection conn = new SqlConnection(connectionString);
103
104            //在這裏我們用一個try/catch結構執行sql文本命令/存儲過程,因爲如果這個方法產生一個異常我們要關閉連接,因爲沒有讀取器存在,
105            //因此commandBehaviour.CloseConnection 就不會執行
106            try
107            {
108                //調用 PrepareCommand 方法,對 SqlCommand 對象設置參數
109                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
110                //調用 SqlCommand  的 ExecuteReader 方法
111                SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
112                //清除參數
113                cmd.Parameters.Clear();
114                return reader;
115            }

116            catch
117            {
118                //關閉連接,拋出異常
119                conn.Close();
120                throw;
121            }

122        }

123
124        /// <summary>
125        /// 用指定的數據庫連接字符串執行一個命令並返回一個數據集的第一列
126        /// </summary>
127        /// <remarks>
128        ///例如: 
129        ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
130        /// </remarks>
131        ///<param name="connectionString">一個有效的連接字符串</param>
132        /// <param name="commandType">命令類型(存儲過程, 文本, 等等)</param>
133        /// <param name="commandText">存儲過程名稱或者sql命令語句</param>
134        /// <param name="commandParameters">執行命令所用參數的集合</param>
135        /// <returns>用 Convert.To{Type}把類型轉換爲想要的 </returns>

136        public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
137        {
138            SqlCommand cmd = new SqlCommand();
139
140            using (SqlConnection connection = new SqlConnection(connectionString))
141            {
142                PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
143                object val = cmd.ExecuteScalar();
144                cmd.Parameters.Clear();
145                return val;
146            }

147        }

148
149        /// <summary>
150        /// 用指定的數據庫連接執行一個命令並返回一個數據集的第一列
151        /// </summary>
152        /// <remarks>
153        /// 例如: 
154        ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
155        /// </remarks>
156        /// <param name="conn">一個存在的數據庫連接</param>
157        /// <param name="commandType">命令類型(存儲過程, 文本, 等等)</param>
158        /// <param name="commandText">存儲過程名稱或者sql命令語句</param>
159        /// <param name="commandParameters">執行命令所用參數的集合</param>
160        /// <returns>用 Convert.To{Type}把類型轉換爲想要的 </returns>

161        public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
162        {
163
164            SqlCommand cmd = new SqlCommand();
165
166            PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
167            object val = cmd.ExecuteScalar();
168            cmd.Parameters.Clear();
169            return val;
170        }

171
172        /// <summary>
173        /// 將參數集合添加到緩存
174        /// </summary>
175        /// <param name="cacheKey">添加到緩存的變量</param>
176        /// <param name="cmdParms">一個將要添加到緩存的sql參數集合</param>

177        public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)
178        {
179            parmCache[cacheKey] = commandParameters;
180        }

181
182        /// <summary>
183        /// 找回緩存參數集合
184        /// </summary>
185        /// <param name="cacheKey">用於找回參數的關鍵字</param>
186        /// <returns>緩存的參數集合</returns>

187        public static SqlParameter[] GetCachedParameters(string cacheKey)
188        {
189            SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];
190
191            if (cachedParms == null)
192                return null;
193
194            SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];
195
196            for (int i = 0, j = cachedParms.Length; i < j; i++)
197                clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();
198
199            return clonedParms;
200        }

201
202        /// <summary>
203        /// 準備執行一個命令
204        /// </summary>
205        /// <param name="cmd">sql命令</param>
206        /// <param name="conn">Sql連接</param>
207        /// <param name="trans">Sql事務</param>
208        /// <param name="cmdType">命令類型例如 存儲過程或者文本</param>
209        /// <param name="cmdText">命令文本,例如:Select * from Products</param>
210        /// <param name="cmdParms">執行命令的參數</param>

211        private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
212        {
213
214            if (conn.State != ConnectionState.Open)
215                conn.Open();
216
217            cmd.Connection = conn;
218            cmd.CommandText = cmdText;
219
220            if (trans != null)
221                cmd.Transaction = trans;
222
223            cmd.CommandType = cmdType;
224
225            if (cmdParms != null)
226            {
227                foreach (SqlParameter parm in cmdParms)
228                    cmd.Parameters.Add(parm);
229            }

230        }

231    }

232}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章