C#:SqlHelper
C#:SqlHelper
虽然日常工作中都是调用别人写好的底层,但是要真正学到技术,还是要懂些底层原理,最好是能自己写底层
一、底层
注:引用命名空间
using System.Data;
using System.Data.SqlClient;
1 public class SqlHelper
2 {
3 /// <summary>
4 /// 数据库连接字符串
5 /// Data Source=数据库地址;Initial Catalog=数据库名称;Persist Security Info=True;User ID=用户名;Password=密码
6 /// </summary>
7 private string _SqlConnectionStr = "";
8 public string SqlConnectionStr { get { return _SqlConnectionStr; } }
9 public SqlHelper(string connStr)
10 {
11 this._SqlConnectionStr = connStr;
12 }
13 #region 单值查询
14 public string GetSingle(string sqlStr)
15 {
16 using (SqlConnection conn = new SqlConnection(this._SqlConnectionStr))
17 {
18 using (SqlCommand cmd = new SqlCommand(sqlStr, conn))
19 {
20 try
21 {
22 conn.Open();
23 return String.Format("{0}", cmd.ExecuteScalar());
24 }
25 catch(SqlException e)
26 {
27 throw e;
28 }
29 finally
30 {
31 conn.Close();
32 }
33 }
34 }
35 }
36 public string GetSingle(string sqlStr,SqlParameter[] cmdParams)
37 {
38 using (SqlConnection conn = new SqlConnection(this._SqlConnectionStr))
39 {
40 using (SqlCommand cmd = new SqlCommand())
41 {
42 try
43 {
44 conn.Open();
45 cmd.Connection = conn;
46 cmd.CommandType = CommandType.Text;
47 cmd.CommandText = sqlStr;
48 cmd.Parameters.AddRange(cmdParams);
49 return String.Format("{0}", cmd.ExecuteScalar());
50 }
51 catch(SqlException e)
52 {
53 throw e;
54 }
55 finally
56 {
57 conn.Close();
58 }
59 }
60 }
61 }
62 #endregion
63
64 #region 查询数据集
65 public DataSet Query(string sqlStr)
66 {
67 using (SqlConnection conn = new SqlConnection(this._SqlConnectionStr))
68 {
69 using (SqlDataAdapter ada = new SqlDataAdapter(sqlStr, conn))
70 {
71 try
72 {
73 conn.Open();
74 DataSet ds = new DataSet();
75 ada.Fill(ds);
76 return ds;
77 }
78 catch(SqlException e)
79 {
80 throw e;
81 }
82 finally
83 {
84 conn.Close();
85 }
86 }
87 }
88 }
89 public DataSet Query(string sqlStr,SqlParameter[] cmdParams)
90 {
91 using (SqlConnection conn = new SqlConnection(this._SqlConnectionStr))
92 {
93 using (SqlCommand cmd = new SqlCommand())
94 {
95 using (SqlDataAdapter ada = new SqlDataAdapter(cmd))
96 {
97 try
98 {
99 conn.Open();
100 cmd.Connection = conn;
101 cmd.CommandType = CommandType.Text;
102 cmd.CommandText = sqlStr;
103 cmd.Parameters.AddRange(cmdParams);
104
105 DataSet ds = new DataSet();
106 ada.Fill(ds);
107 return ds;
108 }
109 catch(SqlException e)
110 {
111 throw e;
112 }
113 finally
114 {
115 conn.Close();
116 }
117 }
118 }
119 }
120 }
121 public DataSet RunProcedure(string procName,SqlParameter[] cmdParams)
122 {
123 using (SqlConnection conn = new SqlConnection(this._SqlConnectionStr))
124 {
125 using (SqlCommand cmd = new SqlCommand())
126 {
127 using (SqlDataAdapter ada = new SqlDataAdapter(cmd))
128 {
129 try
130 {
131 conn.Open();
132 cmd.Connection = conn;
133 cmd.CommandType = CommandType.StoredProcedure;
134 cmd.CommandText = procName;
135 cmd.Parameters.AddRange(cmdParams);
136
137 DataSet ds = new DataSet();
138 ada.Fill(ds);
139 return ds;
140 }
141 catch(SqlException e)
142 {
143 throw e;
144 }
145 finally
146 {
147 conn.Close();
148 }
149 }
150 }
151 }
152 }
153 #endregion
154
155 #region 单表查询
156 public DataTable GetQueryData(string sqlStr)
157 {
158 DataSet ds = Query(sqlStr);
159 if (ds != null && ds.Tables.Count > 0)
160 return ds.Tables[0];
161 return null;
162 }
163 public DataTable GetQueryData(string sqlStr ,SqlParameter[] cmdParams)
164 {
165 DataSet ds = Query(sqlStr, cmdParams);
166 if (ds != null && ds.Tables.Count > 0)
167 return ds.Tables[0];
168 return null;
169 }
170 public DataTable GetProcData(string procName,SqlParameter[] cmdParams)
171 {
172 DataSet ds = RunProcedure(procName, cmdParams);
173 if (ds != null && ds.Tables.Count > 0)
174 return ds.Tables[0];
175 return null;
176 }
177 #endregion
178
179 #region 单行查询
180 public DataRow GetQueryRecord(string sqlStr)
181 {
182 DataTable dt = GetQueryData(sqlStr);
183 if (dt != null && dt.Rows.Count > 0)
184 return dt.Rows[0];
185 return null;
186 }
187 public DataRow GetQueryRecord(string sqlStr,SqlParameter[] cmdParams)
188 {
189 DataTable dt = GetQueryData(sqlStr, cmdParams);
190 if (dt != null && dt.Rows.Count > 0)
191 return dt.Rows[0];
192 return null;
193 }
194 public DataRow GetProcRecord(string procName,SqlParameter[] cmdParams)
195 {
196 DataTable dt = GetProcData(procName, cmdParams);
197 if (dt != null && dt.Rows.Count > 0)
198 return dt.Rows[0];
199 return null;
200 }
201 #endregion
202
203 #region 使用完应关闭Reader
204 public SqlDataReader ExecuteReader(string sqlStr)
205 {
206 SqlConnection conn = new SqlConnection(this._SqlConnectionStr);
207 SqlCommand cmd = new SqlCommand(sqlStr, conn);
208 try
209 {
210 conn.Open();
211 return cmd.ExecuteReader(CommandBehavior.CloseConnection);
212 }
213 catch(SqlException e)
214 {
215 throw e;
216 }
217 }
218 public SqlDataReader ExecuteReeder(string sqlStr,SqlParameter[] cmdParams)
219 {
220 SqlConnection conn = new SqlConnection(this._SqlConnectionStr);
221 SqlCommand cmd = new SqlCommand();
222 try
223 {
224 conn.Open();
225 cmd.Connection = conn;
226 cmd.CommandType = CommandType.Text;
227 cmd.CommandText = sqlStr;
228 cmd.Parameters.AddRange(cmdParams);
229 return cmd.ExecuteReader(CommandBehavior.CloseConnection);
230 }
231 catch(SqlException e)
232 {
233 throw e;
234 }
235 }
236 #endregion
237
238 #region 执行sql语句
239 public int ExecuteSql(string sqlStr)
240 {
241 using (SqlConnection conn = new SqlConnection(this._SqlConnectionStr))
242 {
243 using (SqlCommand cmd = new SqlCommand(sqlStr, conn))
244 {
245 try
246 {
247 conn.Open();
248 return cmd.ExecuteNonQuery();
249 }
250 catch(SqlException e)
251 {
252 throw e;
253 }
254 finally
255 {
256 conn.Close();
257 }
258 }
259 }
260 }
261 public int ExecuteSql(string sqlStr,SqlParameter[] cmdParams)
262 {
263 using (SqlConnection conn = new SqlConnection(this._SqlConnectionStr))
264 {
265 using (SqlCommand cmd = new SqlCommand())
266 {
267 try
268 {
269 conn.Open();
270 cmd.Connection = conn;
271 cmd.CommandType = CommandType.Text;
272 cmd.CommandText = sqlStr;
273 cmd.Parameters.AddRange(cmdParams);
274 return cmd.ExecuteNonQuery();
275 }
276 catch(SqlException e)
277 {
278 throw e;
279 }
280 finally
281 {
282 conn.Close();
283 }
284 }
285 }
286 }
287 #endregion
288
289 #region 执行事务
290 public int ExecuteSqlTran(List<string> sqlStrList)
291 {
292 using (SqlConnection conn = new SqlConnection(this._SqlConnectionStr))
293 {
294 using (SqlCommand cmd = new SqlCommand())
295 {
296 using (SqlTransaction tran = conn.BeginTransaction())
297 {
298 try
299 {
300 cmd.Connection = conn;
301 cmd.CommandType = CommandType.Text;
302 cmd.Transaction = tran;
303 conn.Open();
304 int count = 0;
305 foreach(string sql in sqlStrList)
306 {
307 cmd.CommandText = sql;
308 count += cmd.ExecuteNonQuery();
309 }
310 tran.Commit();
311 return count;
312 }
313 catch(SqlException e)
314 {
315 tran.Rollback();
316 throw e;
317 }
318 finally
319 {
320 conn.Close();
321 }
322 }
323 }
324 }
325 }
326 public int ExecuteSqlTran(List<KeyValuePair<string,SqlParameter[]>> sqlStrList)
327 {
328 using (SqlConnection conn = new SqlConnection(this._SqlConnectionStr))
329 {
330 using (SqlCommand cmd = new SqlCommand())
331 {
332 using (SqlTransaction tran = conn.BeginTransaction())
333 {
334 try
335 {
336 cmd.Connection = conn;
337 cmd.CommandType = CommandType.Text;
338 cmd.Transaction = tran;
339 conn.Open();
340 int count = 0;
341 foreach(var item in sqlStrList)
342 {
343 cmd.CommandText = item.Key;
344 cmd.Parameters.Clear();
345 cmd.Parameters.AddRange(item.Value);
346 count += cmd.ExecuteNonQuery();
347 }
348 tran.Commit();
349 return count;
350 }
351 catch(SqlException e)
352 {
353 tran.Rollback();
354 throw e;
355 }
356 finally
357 {
358 conn.Close();
359 }
360 }
361 }
362 }
363 }
364 public int ExecuteProc(string procName,SqlParameter[] cmdParams)
365 {
366 using (SqlConnection conn = new SqlConnection(this._SqlConnectionStr))
367 {
368 using (SqlCommand cmd = new SqlCommand())
369 {
370 try
371 {
372 conn.Open();
373 cmd.Connection = conn;
374 cmd.CommandType = CommandType.StoredProcedure;
375 cmd.CommandText = procName;
376 cmd.Parameters.AddRange(cmdParams);
377 return cmd.ExecuteNonQuery();
378 }
379 catch(SqlException e)
380 {
381 throw e;
382 }
383 finally
384 {
385 conn.Close();
386 }
387 }
388 }
389 }
390 #endregion
391 }
二、工厂模式
1 public class DbProvider
2 {
3 private static string _SqlConnectionStr = null;
4 public static string SqlConnectionStr
5 {
6 get
7 {
8 string connStr = _SqlConnectionStr;
9 if (connStr == null)
10 connStr = "Data Source=(local);Initial Catalog=testDB;Persist Security Info=True;User ID=sa;Password=123456"; //一般这里是读取项目配置文件里的数据库参数来生成连接字符串
11 return connStr;
12 }
13 }
14 public static SqlHelper SqlServer
15 {
16 get
17 {
18 return new SqlHelper(SqlConnectionStr);
19 }
20 }
21 }
三、实例使用
1 public class Demo
2 {
3 public DataTable QueryOrderInfo(string id)
4 {
5 string sql = "select * from order where id=@id";
6 SqlParameter[] cmdParams = new SqlParameter[] { new SqlParameter("@id", id) };
7 return DbProvider.SqlServer.GetQueryData(sql, cmdParams);
8 }
9 }