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}
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}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.