SQL数据库操作类
作者:佚名 来源:网络转载 发布时间:2009-01-14 16:26:00
我把数据库操作类整理了一下,它包含了常用的数据库操作,由三种方式:简单的SQL拼接字符串的形式,SQL语句使用参数的形式和存储过程的形式,每种形式均有五个方法,并且都有事务.,可以直接调用.代码如下:
1//======================================================================
2//
3// Copyright (C) 2007-2008 三月软件工作室
4// All rights reserved
5//
6// filename :SQLDataBase
7// description :
8//
9// created by 侯垒 at 04/14/2008 18:33:32
10// http://houleixx.cnblogs.com
11//
12//======================================================================
13
14using System;
15using System.Collections;
16using System.Collections.Specialized;
17using System.Data;
18using System.Data.SqlClient;
19using System.Configuration;
20using System.Data.Common;
21
22namespace SQLDataBase
23{
24 /**//// <summary>
25 /// 数据访问基础类(基于SQLServer)
26 /// </summary>
27 class SQLDataBase
28 {
29 protected static string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
30 public SQLDataBase()
31 {
32
33 }
34
35 执行简单SQL语句#region 执行简单SQL语句
36
37 /**//// <summary>
38 /// 执行SQL语句,返回影响的记录数
39 /// </summary>
40 /// <param name="SQLString">SQL语句</param>
41 /// <returns>影响的记录数</returns>
42 public int ExecuteSql(string SQLString)
43 {
44 using (SqlConnection connection = new SqlConnection(connectionString))
45 {
46 using (SqlCommand cmd = new SqlCommand(SQLString, connection))
47 {
48 try
49 {
50 connection.Open();
51 int rows = cmd.ExecuteNonQuery();
52 return rows;
53 }
54 catch (System.Data.SqlClient.SqlException E)
55 {
56 connection.Close();
57 throw new Exception(E.Message);
58 }
59 }
60 }
61 }
62
63 /**//// <summary>
64 /// 执行多条SQL语句,实现数据库事务。
65 /// </summary>
66 /// <param name="SQLStringList">多条SQL语句</param>
67 public void ExecuteSqlTran(ArrayList SQLStringList)
68 {
69 using (SqlConnection conn = new SqlConnection(connectionString))
70 {
71 conn.Open();
72 SqlCommand cmd = new SqlCommand();
73 cmd.Connection = conn;
74 SqlTransaction tx = conn.BeginTransaction();
75 cmd.Transaction = tx;
76 try
77 {
78 for (int n = 0; n < SQLStringList.Count; n++)
79 {
80 string strsql = SQLStringList[n].ToString();
81 if (strsql.Trim().Length > 1)
82 {
83 cmd.CommandText = strsql;
84 cmd.ExecuteNonQuery();
85 }
86 }
87 tx.Commit();
88 }
89 catch (System.Data.SqlClient.SqlException E)
90 {
91 tx.Rollback();
92 throw new Exception(E.Message);
93 }
94 }
95 }
96 /**//// <summary>
97 /// 执行一条计算查询结果语句,返回查询结果(object)。
98 /// </summary>
99 /// <param name="SQLString">计算查询结果语句</param>
100 /// <returns>查询结果(object)</returns>
101 public object GetSingle(string SQLString)
102 {
103 using (SqlConnection connection = new SqlConnection(connectionString))
104 {
105 using (SqlCommand cmd = new SqlCommand(SQLString, connection))
106 {
107 try
108 {
109 connection.Open();
110 object obj = cmd.ExecuteScalar();
111 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
112 {
113 return null;
114 }
115 else
116 {
117 return obj;
118 }
119 }
120 catch (System.Data.SqlClient.SqlException e)
121 {
122 connection.Close();
123 throw new Exception(e.Message);
124 }
125 }
126 }
127 }
128 /**//// <summary>
129 /// 执行查询语句,返回SqlDataReader
130 /// </summary>
131 /// <param name="strSQL">查询语句</param>
132 /// <returns>SqlDataReader</returns>
133 public DbDataReader ExecuteReader(string strSQL)
134 {
135 SqlConnection connection = new SqlConnection(connectionString);
136 SqlCommand cmd = new SqlCommand(strSQL, connection);
137 try
138 {
139 connection.Open();
140 SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
141 return myReader;
142 }
143 catch (System.Data.SqlClient.SqlException e)
144 {
145 throw new Exception(e.Message);
146 }
147
148 }
149 /**//// <summary>
150 /// 执行查询语句,返回DataSet
151 /// </summary>
152 /// <param name="SQLString">查询语句</param>
153 /// <returns>DataSet</returns>
154 public DataSet GetDataSet(string SQLString)
155 {
156 using (SqlConnection connection = new SqlConnection(connectionString))
157 {
158 DataSet ds = new DataSet();
159 try
160 {
161 connection.Open();
162 SqlDataAdapter adapter = new SqlDataAdapter(SQLString, connection);
163 adapter.Fill(ds, "ds");
164 connection.Close();
165 return ds;
166 }
167 catch (System.Data.SqlClient.SqlException ex)
168 {
169 throw new Exception(ex.Message);
170 }
171 }
172 }
173
174
175 #endregion
176
177 执行带参数的SQL语句#region 执行带参数的SQL语句
178
179 /**//// <summary>
180 /// 执行SQL语句,返回影响的记录数
181 /// </summary>
182 /// <param name="SQLString">SQL语句</param>
183 /// <returns>影响的记录数</returns>
184 public int ExecuteSql(string SQLString, DbParameter[] cmdParms)
185 {
186 using (SqlConnection connection = new SqlConnection(connectionString))
187 {
188 using (SqlCommand cmd = new SqlCommand())
189 {
190 try
191 {
192 PrepareCommand(cmd, connection, null, SQLString, cmdParms);
193 int rows = cmd.ExecuteNonQuery();
194 cmd.Parameters.Clear();
195 return rows;
196 }
197 catch (System.Data.SqlClient.SqlException E)
198 {
199 throw new Exception(E.Message);
200 }
201 }
202 }
203 }
204
205
206 /**//// <summary>
207 /// 执行多条SQL语句,实现数据库事务。
208 /// </summary>
209 /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
210 public void ExecuteSqlTran(Hashtable SQLStringList)
211 {
212 using (SqlConnection conn = new SqlConnection(connectionString))
213 {
214 conn.Open();
215 using (SqlTransaction trans = conn.BeginTransaction())
216 {
217 SqlCommand cmd = new SqlCommand();
218 try
219 {
220 //循环
221 foreach (DictionaryEntry myDE in SQLStringList)
222 {
223 string cmdText = myDE.Key.ToString();
224 SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
225 PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
226 int val = cmd.ExecuteNonQuery();
227 cmd.Parameters.Clear();
228 }
229 trans.Commit();
230 }
231 catch
232 {
233 trans.Rollback();
234 throw;
235 }
236 }
237 }
238 }
239
240
241 /**//// <summary>
242 /// 执行一条计算查询结果语句,返回查询结果(object),返回首行首列的值;
243 /// </summary>
244 /// <param name="SQLString">计算查询结果语句</param>
245 /// <returns>查询结果(object)</returns>
246 public object GetSingle(string SQLString, DbParameter[] cmdParms)
247 {
248 using (SqlConnection connection = new SqlConnection(connectionString))
249 {
250 using (SqlCommand cmd = new SqlCommand())
251 {
252 try
253 {
254 PrepareCommand(cmd, connection, null, SQLString, cmdParms);
255 object obj = cmd.ExecuteScalar();
256 cmd.Parameters.Clear();
257 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
258 {
259 return null;
260 }
261 else
262 {
263 return obj;
264 }
265 }
266 catch (System.Data.SqlClient.SqlException e)
267 {
268 throw new Exception(e.Message);
269 }
270 }
271 }
272 }
273
274 /**//// <summary>
275 /// 执行查询语句,返回SqlDataReader
276 /// </summary>
277 /// <param name="strSQL">查询语句</param>
278 /// <returns>SqlDataReader</returns>
279 public DbDataReader ExecuteReader(string SQLString, DbParameter[] cmdParms)
280 {
281 SqlConnection connection = new SqlConnection(connectionString);
282 SqlCommand cmd = new SqlCommand();
283 try
284 {
285 PrepareCommand(cmd, connection, null, SQLString, cmdParms);
286 SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
287 cmd.Parameters.Clear();
288 return myReader;
289 }
290 catch (System.Data.SqlClient.SqlException e)
291 {
292 throw new Exception(e.Message);
293 }
294
295 }
296
297 /**//// <summary>
298 /// 执行查询语句,返回DataSet
299 /// </summary>
300 /// <param name="SQLString">查询语句</param>
301 /// <returns>DataSet</returns>
302 public DataSet GetDataSet(string SQLString, DbParameter[] cmdParms)
303 {
304 using (SqlConnection connection = new SqlConnection(connectionString))
305 {
306 SqlCommand cmd = new SqlCommand();
307 PrepareCommand(cmd, connection, null, SQLString, cmdParms);
308 using (SqlDataAdapter da = new SqlDataAdapter(cmd))
309 {
310 DataSet ds = new DataSet();
311 try
312 {
313 da.Fill(ds, "ds");
314 cmd.Parameters.Clear();
315 return ds;
316 }
317 catch (System.Data.SqlClient.SqlException ex)
318 {
319 throw new Exception(ex.Message);
320 }
321 }
322 }
323 }
324
325
326 private void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, DbParameter[] cmdParms)
327 {
328 if (conn.State != ConnectionState.Open)
329 conn.Open();
330 cmd.Connection = conn;
331 cmd.CommandText = cmdText;
332 if (trans != null)
333 cmd.Transaction = trans;
334 cmd.CommandType = CommandType.Text;//cmdType;
335 if (cmdParms != null)
336 {
337 foreach (SqlParameter parm in cmdParms)
338 cmd.Parameters.Add(parm);
339 }
340 }
341
342 #endregion
343
344 存储过程操作#region 存储过程操作
345 /**//// <summary>
346 /// 执行存储过程;
347 /// </summary>
348 /// <param name="storeProcName">存储过程名</param>
349 /// <param name="parameters">所需要的参数</param>
350 /// <returns>返回受影响的行数</returns>
351 public int RunProcedureExecuteSql(string storeProcName, DbParameter[] parameters)
352 {
353 using (SqlConnection connection = new SqlConnection(connectionString))
354 {
355 SqlCommand cmd = BuildQueryCommand(connection, storeProcName, parameters);
356 int rows = cmd.ExecuteNonQuery();
357 cmd.Parameters.Clear();
358 connection.Close();
359 return rows;
360 }
361 }
362 /**//// <summary>
363 /// 执行存储过程,返回首行首列的值
364 /// </summary>
365 /// <param name="storeProcName">存储过程名</param>
366 /// <param name="parameters">存储过程参数</param>
367 /// <returns>返回首行首列的值</returns>
368 public Object RunProcedureGetSingle(string storeProcName, DbParameter[] parameters)
369 {
370 using (SqlConnection connection = new SqlConnection(connectionString))
371 {
372 try
373 {
374 SqlCommand cmd = BuildQueryCommand(connection, storeProcName, parameters);
375 object obj = cmd.ExecuteScalar();
376 cmd.Parameters.Clear();
377 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
378 {
379 return null;
380 }
381 else
382 {
383 return obj;
384 }
385 }
386 catch (System.Data.SqlClient.SqlException e)
387 {
388 throw new Exception(e.Message);
389 }
390 }
391 }
392 /**//// <summary>
393 /// 执行存储过程
394 /// </summary>
395 /// <param name="storedProcName">存储过程名</param>
396 /// <param name="parameters">存储过程参数</param>
397 /// <returns>SqlDataReader</returns>
398 public DbDataReader RunProcedureGetDataReader(string storedProcName, DbParameter[] parameters)
399 {
400 SqlConnection connection = new SqlConnection(connectionString);
401 SqlDataReader returnReader;
402 SqlCommand cmd = BuildQueryCommand(connection, storedProcName, parameters);
403 cmd.CommandType = CommandType.StoredProcedure;
404 returnReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
405 cmd.Parameters.Clear();
406 return returnReader;
407 }
408 /**//// <summary>
409 /// 执行存储过程
410 /// </summary>
411 /// <param name="storedProcName">存储过程名</param>
412 /// <param name="parameters">存储过程参数</param>
413 /// <returns>DataSet</returns>
414 public DataSet RunProcedureGetDataSet(string storedProcName, DbParameter[] parameters)
415 {
416 using (SqlConnection connection = new SqlConnection(connectionString))
417 {
418 DataSet dataSet = new DataSet();
419 connection.Open();
420 SqlDataAdapter sqlDA = new SqlDataAdapter();
421 sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
422 sqlDA.Fill(dataSet);
423 connection.Close();
424 sqlDA.SelectCommand.Parameters.Clear();
425 sqlDA.Dispose();
426 return dataSet;
427 }
428 }
429 /**//// <summary>
430 /// 执行多个存储过程,实现数据库事务。
431 /// </summary>
432 /// <param name="SQLStringList">存储过程的哈希表(key是该语句的DbParameter[],value为存储过程语句)</param>
433 public bool RunProcedureTran(Hashtable SQLStringList)
434 {
435 using (SqlConnection connection = new SqlConnection(connectionString))
436 {
437 connection.Open();
438 using (SqlTransaction trans = connection.BeginTransaction())
439 {
440 SqlCommand cmd = new SqlCommand();
441 try
442 {
443 //循环
444 foreach (DictionaryEntry myDE in SQLStringList)
445 {
446 cmd.Connection = connection;
447 string storeName = myDE.Value.ToString();
448 SqlParameter[] cmdParms = (SqlParameter[])myDE.Key;
449
450 cmd.Transaction = trans;
451 cmd.CommandText = storeName;
452 cmd.CommandType = CommandType.StoredProcedure;
453 if (cmdParms != null)
454 {
455 foreach (SqlParameter parameter in cmdParms)
456 cmd.Parameters.Add(parameter);
457 }
458 int val = cmd.ExecuteNonQuery();
459 cmd.Parameters.Clear();
460 }
461 trans.Commit();
462 return true;
463 }
464 catch
465 {
466 trans.Rollback();
467 return false;
468 throw;
469 }
470 }
471 }
472 }
473 /**//// <summary>
474 /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
475 /// </summary>
476 /// <param name="connection">数据库连接</param>
477 /// <param name="storedProcName">存储过程名</param>
478 /// <param name="parameters">存储过程参数</param>
479 /// <returns>SqlCommand</returns>
480 private SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, DbParameter[] parameters)
481 {
482 if (connection.State != ConnectionState.Open)
483 connection.Open();
484 SqlCommand command = new SqlCommand(storedProcName, connection);
485 command.CommandType = CommandType.StoredProcedure;
486 if (parameters != null)
487 {
488 foreach (SqlParameter parameter in parameters)
489 {
490 command.Parameters.Add(parameter);
491 }
492 }
493 return command;
494 }
495 #endregion
496
497 }
498}
499
猜你喜欢
- 一个小代码 类似资源管理器效果 支持鼠标拖拽 没写些细节东西 JavaScript语言:
- ul设置浮动后不能自适应高度,也就是不能撑开父容器,不能自适应内容的高度。解决方法是在ul结束标签前加个清除浮动。 &
- 前几天帮人调试一个ASP+SQL2000+IIS5.1/6.0的网站程序,调试过程中遇到的问题如下:一、 SQLServer登录 原先存在备
- 这个问题已经不是什么新鲜问题了,网上也有大把的教程,但大多数是授人以鱼,而不授人以渔,经过辛苦的资料收集,思考,调试,整理,我基本上已经把这
- 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字
- 想要asp能连接mysql数据库需要安装MySQL ODBC 3.51 驱动 http://www.jb51.net/softs/19910
- 想必大家都很喜欢用Word打字,用Excel进行计算和规划,用PowerPoint作幻灯片进行展示…,但是这只用到了Office系列产品的很
- 不加(0)的用法:set rs=conn.execute(sql)'将这个结果赋给rs这时要读取这个记录集第一个字段的数据就用rs(
- 新浪天气预报代码,需要的朋友可以复制下面的代码到要显示的页面,新浪代码 :<IFRAME WIDTH='260
- 1069错误(由于登录失败而无法启动服务)解决方法在本版面出现这个问题的频率也算是很高的了,新手通常会比较多遇到这个问题原因很简单,安装SQ
- 六、XML展望 任何一项新技术的产生都是有其需求背景的,XML的诞生是在HTML遇到不可克服的困难之后。近年来HTML在许多复杂的Web应用
- 上次用Javascript+ASP实现了无刷新的新闻列表,最后还有一个小问题没有解决:下边的分页数列"首页、上10页、下10页、尾
- Installing mysql (2.8.1) with native extensions /usr/local/lib/ruby/si
- 在asp编程中,我们常常使用trim(rtrim ,ltrim)函数去掉一些数据的开头和结尾的空格,笔者最近写了一个asp聊天室,看到下面的
- 看到了很多关于如何读出图片的长度的高度的方法,其实都不实用,大多都是通过图片的大小来判断的,图片的种类众多,通过大小来判断难免要制造很多的代
- 相信在使用MSSQL数据库下使用事务回滚方式操作多表记录的时候,会经常出现“不能在手动或分布事务方式下创建新的连接”的出错提示信息,这个问题
- iUI、jQTouch、WPTouch、PhoneGap、XUI、iWebkit、Rhodes、gwt-mobile…当我们已经开始惊叹 w
- clipboardData 对象提供了对于预定义的剪贴板格式的访问,以便在编辑操作中使用。成员表方法 描述 clearData 通过 dat
- 介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。 摘 要
- 平时在PL/SQL中的编程中遇到一些问题,这里以问答的形式来进行把它们总结下来,以供大家分享。1、当需要向表中装载大量的数据流或者需要处理大