FoolWeb.DateEngine 数据库操作类库
这里现在只写了一个类用于操作mssql.将来支持别的数据库试直接扩展就行了.
下来带个代码段
1: /// <summary>通用数据库接口
2: /// </summary>
3: using System;
4: using System.Collections;
5: using System.Collections.Generic;
6: using System.Data;
7: using System.Data.SqlClient;
8: using System.Configuration;
9:
10: namespace FoolWeb.DateEngine {
11:
12: #region 事务属性
13: public enum EffentNextType {
14: /// <summary>
15: /// 对其他语句无任何影响
16: /// </summary>
17: None,
18: /// <summary>
19: /// 当前语句必须为"SELECT COUNT(1) FROM .."格式,如果存在则继续执行,不存在回滚事务
20: /// </summary>
21: WhenHaveContine,
22: /// <summary>
23: /// 当前语句必须为"SELECT COUNT(1) FROM .."格式,如果不存在则继续执行,存在回滚事务
24: /// </summary>
25: WhenNoHaveContine,
26: /// <summary>
27: /// 当前语句影响到的行数必须大于0,否则回滚事务
28: /// </summary>
29: ExcuteEffectRows,
30: /// <summary>
31: /// 引发事件-当前语句必须为"SELECT COUNT(1) FROM .."格式,如果不存在则继续执行,存在回滚事务
32: /// </summary>
33: SolicitationEvent
34: }
35:
36: #endregion
37: #region command定义
38: public class CommandInfo {
39: public object ShareObject=null;
40: public object OriginalData=null;
41: event EventHandler _solicitationEvent;
42:
43: public event EventHandler SolicitationEvent {
44: add {
45: _solicitationEvent+=value;
46: }
47: remove {
48: _solicitationEvent-=value;
49: }
50: }
51:
52: public void OnSolicitationEvent() {
53: if( _solicitationEvent!=null ) {
54: _solicitationEvent(this, new EventArgs());
55: }
56: }
57:
58: public string CommandText;
59: public System.Data.Common.DbParameter[] Parameters;
60: public EffentNextType EffentNextType=EffentNextType.None;
61:
62: public CommandInfo() {
63: }
64:
65: public CommandInfo( string sqlText, SqlParameter[] para ) {
66: this.CommandText=sqlText;
67: this.Parameters=para;
68: }
69:
70: public CommandInfo( string sqlText, SqlParameter[] para, EffentNextType type ) {
71: this.CommandText=sqlText;
72: this.Parameters=para;
73: this.EffentNextType=type;
74: }
75: }
76: #endregion
77: /// <summary>
78: /// 数据访问抽象基础类
79: /// </summary>
80: public abstract class MsSQLHelper {
81: #region 属性定义
82: //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.
83: public static string connectionString="";
84: //构造函数默认数据库
85: public MsSQLHelper() {
86: connectionString=ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
87: }
88: //构造函数指定数据库
89: public MsSQLHelper( string _connstr ) {
90: connectionString=ConfigurationManager.ConnectionStrings[_connstr].ConnectionString;
91: }
92: #endregion
93: #region 公用方法
94: /// <summary>
95: /// 判断是否存在某表的某个字段
96: /// </summary>
97: /// <param name="tableName">表名称</param>
98: /// <param name="columnName">列名称</param>
99: /// <returns>是否存在</returns>
100: public static bool ColumnExists( string tableName, string columnName ) {
101: string sql="select count(1) from syscolumns where [id]=object_id(\""+tableName+"\") and [name]=\""+columnName+"\"";
102: object res=GetSingle(sql);
103: if( res==null ) {
104: return false;
105: }
106: return Convert.ToInt32(res)>0;
107: }
108: /// <summary>
109: /// 获取表中数字字段的最大值
110: /// </summary>
111: /// <param name="FieldName">字段名</param>
112: /// <param name="TableName">表名</param>
113: /// <returns>返回字段最大值max(空的话返回0)</returns>
114: public static int GetMaxID( string FieldName, string TableName ) {
115: string strsql="select max("+FieldName+") from "+TableName;
116: object obj=MsSQLHelper.GetSingle(strsql);
117: if( obj==null ) {
118: return 0;
119: } else {
120: return int.Parse(obj.ToString());
121: }
122: }
123: /// <summary>
124: /// 判断知否存在值
125: /// </summary>
126: /// <param name="strSql">sql语句</param>
127: /// <returns>存在true不存在false</returns>
128: public static bool Exists( string strSql ) {
129: object obj=MsSQLHelper.GetSingle(strSql);
130: int cmdresult;
131: if( ( Object.Equals(obj, null) )||( Object.Equals(obj, System.DBNull.Value) ) ) {
132: cmdresult=0;
133: } else {
134: cmdresult=int.Parse(obj.ToString());
135: }
136: if( cmdresult==0 ) {
137: return false;
138: } else {
139: return true;
140: }
141: }
142: /// <summary>
143: /// 表是否存在
144: /// </summary>
145: /// <param name="TableName">表名</param>
146: /// <returns>存在true不存在false</returns>
147: public static bool TabExists( string TableName ) {
148: string strsql="select count(*) from sysobjects where id = object_id(N\"["+TableName+"]\") and OBJECTPROPERTY(id, N\"IsUserTable\") = 1";
149: object obj=MsSQLHelper.GetSingle(strsql);
150: int cmdresult;
151: if( ( Object.Equals(obj, null) )||( Object.Equals(obj, System.DBNull.Value) ) ) {
152: cmdresult=0;
153: } else {
154: cmdresult=int.Parse(obj.ToString());
155: }
156: if( cmdresult==0 ) {
157: return false;
158: } else {
159: return true;
160: }
161: }
162: public static bool Exists( string strSql, params SqlParameter[] cmdParms ) {
163: object obj=MsSQLHelper.GetSingle(strSql, cmdParms);
164: int cmdresult;
165: if( ( Object.Equals(obj, null) )||( Object.Equals(obj, System.DBNull.Value) ) ) {
166: cmdresult=0;
167: } else {
168: cmdresult=int.Parse(obj.ToString());
169: }
170: if( cmdresult==0 ) {
171: return false;
172: } else {
173: return true;
174: }
175: }
176: #endregion
177: #region 执行简单SQL语句
178: /// <summary>
179: /// 执行SQL语句,返回影响的记录数
180: /// </summary>
181: /// <param name="SQLString">SQL语句</param>
182: /// <returns>影响的记录数</returns>
183: public static int ExecuteSql( string SQLString ) {
184: using( SqlConnection connection=new SqlConnection(connectionString) ) {
185: using( SqlCommand cmd=new SqlCommand(SQLString, connection) ) {
186: try {
187: connection.Open();
188: int rows=cmd.ExecuteNonQuery();
189: return rows;
190: } catch( System.Data.SqlClient.SqlException e ) {
191: connection.Close();
192: throw e;
193: }
194: }
195: }
196: }
197: /// <summary>
198: /// 执行SQL语句,返回影响的记录数(延迟执行)
199: /// </summary>
200: /// <param name="SQLString">SQL语句</param>
201: /// <param name="Times">延迟时间</param>
202: /// <returns>影响的记录数</returns>
203: public static int ExecuteSqlByTime( string SQLString, int Times ) {
204: using( SqlConnection connection=new SqlConnection(connectionString) ) {
205: using( SqlCommand cmd=new SqlCommand(SQLString, connection) ) {
206: try {
207: connection.Open();
208: cmd.CommandTimeout=Times;
209: int rows=cmd.ExecuteNonQuery();
210: return rows;
211: } catch( System.Data.SqlClient.SqlException e ) {
212: connection.Close();
213: throw e;
214: }
215: }
216: }
217: }
218:
219: /// <summary>
220: /// 执行多条SQL语句,实现数据库事务。
221: /// </summary>
222: /// <param name="SQLStringList">多条SQL语句</param>
223: /// <returns>影响的记录数</returns>
224: public static int ExecuteSqlTran( List<String> SQLStringList ) {
225: using( SqlConnection conn=new SqlConnection(connectionString) ) {
226: conn.Open();
227: SqlCommand cmd=new SqlCommand();
228: cmd.Connection=conn;
229: SqlTransaction tx=conn.BeginTransaction();
230: cmd.Transaction=tx;
231: try {
232: int count=0;
233: for( int n=0 ; n<SQLStringList.Count ; n++ ) {
234: string strsql=SQLStringList[n];
235: if( strsql.Trim().Length>1 ) {
236: cmd.CommandText=strsql;
237: count+=cmd.ExecuteNonQuery();
238: }
239: }
240: tx.Commit();
241: return count;
242: } catch {
243: tx.Rollback();
244: return 0;
245: }
246: }
247: }
248: /// <summary>
249: /// 执行带一个存储过程参数的的SQL语句。
250: /// </summary>
251: /// <param name="SQLString">SQL语句</param>
252: /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
253: /// <returns>影响的记录数</returns>
254: public static int ExecuteSql( string SQLString, string content ) {
255: using( SqlConnection connection=new SqlConnection(connectionString) ) {
256: SqlCommand cmd=new SqlCommand(SQLString, connection);
257: System.Data.SqlClient.SqlParameter myParameter=new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
258: myParameter.Value=content;
259: cmd.Parameters.Add(myParameter);
260: try {
261: connection.Open();
262: int rows=cmd.ExecuteNonQuery();
263: return rows;
264: } catch( System.Data.SqlClient.SqlException e ) {
265: throw e;
266: } finally {
267: cmd.Dispose();
268: connection.Close();
269: }
270: }
271: }
272: /// <summary>
273: /// 执行带一个存储过程参数的的SQL语句。
274: /// </summary>
275: /// <param name="SQLString">SQL语句</param>
276: /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
277: /// <returns>返回查询结果第一列</returns>
278: public static object ExecuteSqlGet( string SQLString, string content ) {
279: using( SqlConnection connection=new SqlConnection(connectionString) ) {
280: SqlCommand cmd=new SqlCommand(SQLString, connection);
281: System.Data.SqlClient.SqlParameter myParameter=new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
282: myParameter.Value=content;
283: cmd.Parameters.Add(myParameter);
284: try {
285: connection.Open();
286: object obj=cmd.ExecuteScalar();
287: if( ( Object.Equals(obj, null) )||( Object.Equals(obj, System.DBNull.Value) ) ) {
288: return null;
289: } else {
290: return obj;
291: }
292: } catch( System.Data.SqlClient.SqlException e ) {
293: throw e;
294: } finally {
295: cmd.Dispose();
296: connection.Close();
297: }
298: }
299: }
300: /// <summary>
301: /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
302: /// </summary>
303: /// <param name="strSQL">SQL语句</param>
304: /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
305: /// <returns>影响的记录数</returns>
306: public static int ExecuteSqlInsertImg( string strSQL, byte[] fs ) {
307: using( SqlConnection connection=new SqlConnection(connectionString) ) {
308: SqlCommand cmd=new SqlCommand(strSQL, connection);
309: System.Data.SqlClient.SqlParameter myParameter=new System.Data.SqlClient.SqlParameter("@fs", SqlDbType.Image);
310: myParameter.Value=fs;
311: cmd.Parameters.Add(myParameter);
312: try {
313: connection.Open();
314: int rows=cmd.ExecuteNonQuery();
315: return rows;
316: } catch( System.Data.SqlClient.SqlException e ) {
317: throw e;
318: } finally {
319: cmd.Dispose();
320: connection.Close();
321: }
322: }
323: }
324: /// <summary>
325: /// 执行一条计算查询结果语句,返回查询结果(object)。
326: /// </summary>
327: /// <param name="SQLString">计算查询结果语句</param>
328: /// <returns>查询结果(object)</returns>
329: public static object GetSingle( string SQLString ) {
330: using( SqlConnection connection=new SqlConnection(connectionString) ) {
331: using( SqlCommand cmd=new SqlCommand(SQLString, connection) ) {
332: try {
333: connection.Open();
334: object obj=cmd.ExecuteScalar();
335: if( ( Object.Equals(obj, null) )||( Object.Equals(obj, System.DBNull.Value) ) ) {
336: return null;
337: } else {
338: return obj;
339: }
340: } catch( System.Data.SqlClient.SqlException e ) {
341: connection.Close();
342: throw e;
343: }
344: }
345: }
346: }
347: public static object GetSingle( string SQLString, int Times ) {
348: using( SqlConnection connection=new SqlConnection(connectionString) ) {
349: using( SqlCommand cmd=new SqlCommand(SQLString, connection) ) {
350: try {
351: connection.Open();
352: cmd.CommandTimeout=Times;
353: object obj=cmd.ExecuteScalar();
354: if( ( Object.Equals(obj, null) )||( Object.Equals(obj, System.DBNull.Value) ) ) {
355: return null;
356: } else {
357: return obj;
358: }
359: } catch( System.Data.SqlClient.SqlException e ) {
360: connection.Close();
361: throw e;
362: }
363: }
364: }
365: }
366: /// <summary>
367: /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
368: /// </summary>
369: /// <param name="strSQL">查询语句</param>
370: /// <returns>SqlDataReader</returns>
371: public static SqlDataReader ExecuteReader( string strSQL ) {
372: SqlConnection connection=new SqlConnection(connectionString);
373: SqlCommand cmd=new SqlCommand(strSQL, connection);
374: try {
375: connection.Open();
376: SqlDataReader myReader=cmd.ExecuteReader(CommandBehavior.CloseConnection);
377: return myReader;
378: } catch( System.Data.SqlClient.SqlException e ) {
379: throw e;
380: }
381: }
382: /// <summary>
383: /// 执行查询语句,返回DataSet
384: /// </summary>
385: /// <param name="SQLString">查询语句</param>
386: /// <returns>DataSet</returns>
387: public static DataSet Query( string SQLString ) {
388: using( SqlConnection connection=new SqlConnection(connectionString) ) {
389: DataSet ds=new DataSet();
390: try {
391: connection.Open();
392: SqlDataAdapter command=new SqlDataAdapter(SQLString, connection);
393: command.Fill(ds, "ds");
394: } catch( System.Data.SqlClient.SqlException ex ) {
395: throw new Exception(ex.Message);
396: }
397: return ds;
398: }
399: }
400: /// <summary>
401: /// 查询并得到数据集DataSet
402: /// </summary>
403: /// <param name="SQLString">查询语句</param>
404: /// <param name="Times"></param>
405: /// <returns></returns>
406: public static DataSet Query( string SQLString, int Times ) {
407: using( SqlConnection connection=new SqlConnection(connectionString) ) {
408: DataSet ds=new DataSet();
409: try {
410: connection.Open();
411: SqlDataAdapter command=new SqlDataAdapter(SQLString, connection);
412: command.SelectCommand.CommandTimeout=Times;
413: command.Fill(ds, "ds");
414: } catch( System.Data.SqlClient.SqlException ex ) {
415: throw new Exception(ex.Message);
416: }
417: return ds;
418: }
419: }
420: #endregion
421: #region 执行带参数的SQL语句
422: /// <summary>
423: /// 执行SQL语句,返回影响的记录数
424: /// </summary>
425: /// <param name="SQLString">SQL语句</param>
426: /// <returns>影响的记录数</returns>
427: public static int ExecuteSql( string SQLString, params SqlParameter[] cmdParms ) {
428: using( SqlConnection connection=new SqlConnection(connectionString) ) {
429: using( SqlCommand cmd=new SqlCommand() ) {
430: try {
431: PrepareCommand(cmd, connection, null, SQLString, cmdParms);
432: int rows=cmd.ExecuteNonQuery();
433: cmd.Parameters.Clear();
434: return rows;
435: } catch( System.Data.SqlClient.SqlException e ) {
436: throw e;
437: }
438: }
439: }
440: }
441: /// <summary>
442: /// 执行多条SQL语句,实现数据库事务。
443: /// </summary>
444: /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
445: public static void ExecuteSqlTran( Hashtable SQLStringList ) {
446: using( SqlConnection conn=new SqlConnection(connectionString) ) {
447: conn.Open();
448: using( SqlTransaction trans=conn.BeginTransaction() ) {
449: SqlCommand cmd=new SqlCommand();
450: try {
451: //循环
452: foreach( DictionaryEntry myDE in SQLStringList ) {
453: string cmdText=myDE.Key.ToString();
454: SqlParameter[] cmdParms=(SqlParameter[])myDE.Value;
455: PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
456: int val=cmd.ExecuteNonQuery();
457: cmd.Parameters.Clear();
458: }
459: trans.Commit();
460: } catch {
461: trans.Rollback();
462: throw;
463: }
464: }
465: }
466: }
467: /// <summary>
468: /// 执行多条SQL语句,实现数据库事务。
469: /// </summary>
470: /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
471: public static int ExecuteSqlTran( System.Collections.Generic.List<CommandInfo> cmdList ) {
472: using( SqlConnection conn=new SqlConnection(connectionString) ) {
473: conn.Open();
474: using( SqlTransaction trans=conn.BeginTransaction() ) {
475: SqlCommand cmd=new SqlCommand();
476: try {
477: int count=0;
478: //循环
479: foreach( CommandInfo myDE in cmdList ) {
480: string cmdText=myDE.CommandText;
481: SqlParameter[] cmdParms=(SqlParameter[])myDE.Parameters;
482: PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
483: if( myDE.EffentNextType==EffentNextType.WhenHaveContine||myDE.EffentNextType==EffentNextType.WhenNoHaveContine ) {
484: if( myDE.CommandText.ToLower().IndexOf("count(")==-1 ) {
485: trans.Rollback();
486: return 0;
487: }
488: object obj=cmd.ExecuteScalar();
489: bool isHave=false;
490: if( obj==null&&obj==DBNull.Value ) {
491: isHave=false;
492: }
493: isHave=Convert.ToInt32(obj)>0;
494: if( myDE.EffentNextType==EffentNextType.WhenHaveContine&&!isHave ) {
495: trans.Rollback();
496: return 0;
497: }
498: if( myDE.EffentNextType==EffentNextType.WhenNoHaveContine&&isHave ) {
499: trans.Rollback();
500: return 0;
501: }
502: continue;
503: }
504: int val=cmd.ExecuteNonQuery();
505: count+=val;
506: if( myDE.EffentNextType==EffentNextType.ExcuteEffectRows&&val==0 ) {
507: trans.Rollback();
508: return 0;
509: }
510: cmd.Parameters.Clear();
511: }
512: trans.Commit();
513: return count;
514: } catch {
515: trans.Rollback();
516: throw;
517: }
518: }
519: }
520: }
521: /// <summary>
522: /// 执行多条SQL语句,实现数据库事务。
523: /// </summary>
524: /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
525: public static void ExecuteSqlTranWithIndentity( System.Collections.Generic.List<CommandInfo> SQLStringList ) {
526: using( SqlConnection conn=new SqlConnection(connectionString) ) {
527: conn.Open();
528: using( SqlTransaction trans=conn.BeginTransaction() ) {
529: SqlCommand cmd=new SqlCommand();
530: try {
531: int indentity=0;
532: //循环
533: foreach( CommandInfo myDE in SQLStringList ) {
534: string cmdText=myDE.CommandText;
535: SqlParameter[] cmdParms=(SqlParameter[])myDE.Parameters;
536: foreach( SqlParameter q in cmdParms ) {
537: if( q.Direction==ParameterDirection.InputOutput ) {
538: q.Value=indentity;
539: }
540: }
541: PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
542: int val=cmd.ExecuteNonQuery();
543: foreach( SqlParameter q in cmdParms ) {
544: if( q.Direction==ParameterDirection.Output ) {
545: indentity=Convert.ToInt32(q.Value);
546: }
547: }
548: cmd.Parameters.Clear();
549: }
550: trans.Commit();
551: } catch {
552: trans.Rollback();
553: throw;
554: }
555: }
556: }
557: }
558: /// <summary>
559: /// 执行多条SQL语句,实现数据库事务。
560: /// </summary>
561: /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
562: public static void ExecuteSqlTranWithIndentity( Hashtable SQLStringList ) {
563: using( SqlConnection conn=new SqlConnection(connectionString) ) {
564: conn.Open();
565: using( SqlTransaction trans=conn.BeginTransaction() ) {
566: SqlCommand cmd=new SqlCommand();
567: try {
568: int indentity=0;
569: //循环
570: foreach( DictionaryEntry myDE in SQLStringList ) {
571: string cmdText=myDE.Key.ToString();
572: SqlParameter[] cmdParms=(SqlParameter[])myDE.Value;
573: foreach( SqlParameter q in cmdParms ) {
574: if( q.Direction==ParameterDirection.InputOutput ) {
575: q.Value=indentity;
576: }
577: }
578: PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
579: int val=cmd.ExecuteNonQuery();
580: foreach( SqlParameter q in cmdParms ) {
581: if( q.Direction==ParameterDirection.Output ) {
582: indentity=Convert.ToInt32(q.Value);
583: }
584: }
585: cmd.Parameters.Clear();
586: }
587: trans.Commit();
588: } catch {
589: trans.Rollback();
590: throw;
591: }
592: }
593: }
594: }
595: /// <summary>
596: /// 执行一条计算查询结果语句,返回查询结果(object)。
597: /// </summary>
598: /// <param name="SQLString">计算查询结果语句</param>
599: /// <returns>查询结果(object)</returns>
600: public static object GetSingle( string SQLString, params SqlParameter[] cmdParms ) {
601: using( SqlConnection connection=new SqlConnection(connectionString) ) {
602: using( SqlCommand cmd=new SqlCommand() ) {
603: try {
604: PrepareCommand(cmd, connection, null, SQLString, cmdParms);
605: object obj=cmd.ExecuteScalar();
606: cmd.Parameters.Clear();
607: if( ( Object.Equals(obj, null) )||( Object.Equals(obj, System.DBNull.Value) ) ) {
608: return null;
609: } else {
610: return obj;
611: }
612: } catch( System.Data.SqlClient.SqlException e ) {
613: throw e;
614: }
615: }
616: }
617: }
618: /// <summary>
619: /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
620: /// </summary>
621: /// <param name="strSQL">查询语句</param>
622: /// <returns>SqlDataReader</returns>
623: public static SqlDataReader ExecuteReader( string SQLString, params SqlParameter[] cmdParms ) {
624: SqlConnection connection=new SqlConnection(connectionString);
625: SqlCommand cmd=new SqlCommand();
626: try {
627: PrepareCommand(cmd, connection, null, SQLString, cmdParms);
628: SqlDataReader myReader=cmd.ExecuteReader(CommandBehavior.CloseConnection);
629: cmd.Parameters.Clear();
630: return myReader;
631: } catch( System.Data.SqlClient.SqlException e ) {
632: throw e;
633: }
634: }
635: /// <summary>
636: /// 执行查询语句,返回DataSet
637: /// </summary>
638: /// <param name="SQLString">查询语句</param>
639: /// <returns>DataSet</returns>
640: public static DataSet Query( string SQLString, params SqlParameter[] cmdParms ) {
641: using( SqlConnection connection=new SqlConnection(connectionString) ) {
642: SqlCommand cmd=new SqlCommand();
643: PrepareCommand(cmd, connection, null, SQLString, cmdParms);
644: using( SqlDataAdapter da=new SqlDataAdapter(cmd) ) {
645: DataSet ds=new DataSet();
646: try {
647: da.Fill(ds, "ds");
648: cmd.Parameters.Clear();
649: } catch( System.Data.SqlClient.SqlException ex ) {
650: throw new Exception(ex.Message);
651: }
652: return ds;
653: }
654: }
655: }
656: private static void PrepareCommand( SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms ) {
657: if( conn.State!=ConnectionState.Open )
658: conn.Open();
659: cmd.Connection=conn;
660: cmd.CommandText=cmdText;
661: if( trans!=null )
662: cmd.Transaction=trans;
663: cmd.CommandType=CommandType.Text;//cmdType;
664: if( cmdParms!=null ) {
665: foreach( SqlParameter parameter in cmdParms ) {
666: if( ( parameter.Direction==ParameterDirection.InputOutput||parameter.Direction==ParameterDirection.Input )&&
667: ( parameter.Value==null ) ) {
668: parameter.Value=DBNull.Value;
669: }
670: cmd.Parameters.Add(parameter);
671: }
672: }
673: }
674: #endregion
675: #region 存储过程操作
676: /// <summary>
677: /// 执行存储过程,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
678: /// </summary>
679: /// <param name="storedProcName">存储过程名</param>
680: /// <returns>SqlDataReader</returns>
681: public static SqlDataReader RunProcedure( string storedProcName ) {
682: SqlConnection connection=new SqlConnection(connectionString);
683: SqlDataReader returnReader;
684: connection.Open();
685: SqlCommand command=new SqlCommand(storedProcName, connection);
686: command.CommandType=CommandType.StoredProcedure;
687: returnReader=command.ExecuteReader(CommandBehavior.CloseConnection);
688: return returnReader;
689: }
690:
691: /// <summary>
692: /// 执行存储过程,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
693: /// </summary>
694: /// <param name="storedProcName">存储过程名</param>
695: /// <param name="parameters">存储过程参数</param>
696: /// <returns>SqlDataReader</returns>
697: public static SqlDataReader RunProcedure( string storedProcName, IDataParameter[] parameters ) {
698: SqlConnection connection=new SqlConnection(connectionString);
699: SqlDataReader returnReader;
700: connection.Open();
701: SqlCommand command=BuildQueryCommand(connection, storedProcName, parameters);
702: command.CommandType=CommandType.StoredProcedure;
703: returnReader=command.ExecuteReader(CommandBehavior.CloseConnection);
704: return returnReader;
705: }
706: /// <summary>
707: /// 执行存储过程
708: /// </summary>
709: /// <param name="storedProcName">存储过程名</param>
710: /// <param name="parameters">存储过程参数</param>
711: /// <param name="tableName">DataSet结果中的表名</param>
712: /// <returns>DataSet</returns>
713: public static DataSet RunProcedure( string storedProcName, string tableName ) {
714: using( SqlConnection connection=new SqlConnection(connectionString) ) {
715: DataSet dataSet=new DataSet();
716: connection.Open();
717: SqlDataAdapter sqlDA=new SqlDataAdapter();
718: sqlDA.SelectCommand=new SqlCommand(storedProcName, connection);
719: sqlDA.Fill(dataSet, tableName);
720: connection.Close();
721: return dataSet;
722: }
723: }
724: /// <summary>
725: /// 执行存储过程
726: /// </summary>
727: /// <param name="storedProcName">存储过程名</param>
728: /// <param name="parameters">存储过程参数</param>
729: /// <param name="tableName">DataSet结果中的表名</param>
730: /// <returns>DataSet</returns>
731: public static DataSet RunProcedure( string storedProcName, IDataParameter[] parameters, string tableName ) {
732: using( SqlConnection connection=new SqlConnection(connectionString) ) {
733: DataSet dataSet=new DataSet();
734: connection.Open();
735: SqlDataAdapter sqlDA=new SqlDataAdapter();
736: sqlDA.SelectCommand=BuildQueryCommand(connection, storedProcName, parameters);
737: sqlDA.Fill(dataSet, tableName);
738: connection.Close();
739: return dataSet;
740: }
741: }
742: public static DataSet RunProcedure( string storedProcName, IDataParameter[] parameters, string tableName, int Times ) {
743: using( SqlConnection connection=new SqlConnection(connectionString) ) {
744: DataSet dataSet=new DataSet();
745: connection.Open();
746: SqlDataAdapter sqlDA=new SqlDataAdapter();
747: sqlDA.SelectCommand=BuildQueryCommand(connection, storedProcName, parameters);
748: sqlDA.SelectCommand.CommandTimeout=Times;
749: sqlDA.Fill(dataSet, tableName);
750: connection.Close();
751: return dataSet;
752: }
753: }
754: /// <summary>
755: /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
756: /// </summary>
757: /// <param name="connection">数据库连接</param>
758: /// <param name="storedProcName">存储过程名</param>
759: /// <param name="parameters">存储过程参数</param>
760: /// <returns>SqlCommand</returns>
761: private static SqlCommand BuildQueryCommand( SqlConnection connection, string storedProcName, IDataParameter[] parameters ) {
762: SqlCommand command=new SqlCommand(storedProcName, connection);
763: command.CommandType=CommandType.StoredProcedure;
764: foreach( SqlParameter parameter in parameters ) {
765: if( parameter!=null ) {
766: // 检查未分配值的输出参数,将其分配以DBNull.Value.
767: if( ( parameter.Direction==ParameterDirection.InputOutput||parameter.Direction==ParameterDirection.Input )&&
768: ( parameter.Value==null ) ) {
769: parameter.Value=DBNull.Value;
770: }
771: command.Parameters.Add(parameter);
772: }
773: }
774: return command;
775: }
776: /// <summary>
777: /// 执行存储过程,返回影响的行数
778: /// </summary>
779: /// <param name="storedProcName">存储过程名</param>
780: /// <param name="parameters">存储过程参数</param>
781: /// <param name="rowsAffected">影响的行数</param>
782: /// <returns></returns>
783: public static int RunProcedure( string storedProcName, out int rowsAffected ) {
784: using( SqlConnection connection=new SqlConnection(connectionString) ) {
785: int result;
786: connection.Open();
787: SqlCommand command=new SqlCommand(storedProcName, connection);
788: rowsAffected=command.ExecuteNonQuery();
789: result=(int)command.Parameters["ReturnValue"].Value;
790: //Connection.Close();
791: return result;
792: }
793: }
794: /// <summary>
795: /// 执行存储过程,返回影响的行数
796: /// </summary>
797: /// <param name="storedProcName">存储过程名</param>
798: /// <param name="parameters">存储过程参数</param>
799: /// <param name="rowsAffected">影响的行数</param>
800: /// <returns></returns>
801: public static int RunProcedure( string storedProcName, IDataParameter[] parameters, out int rowsAffected ) {
802: using( SqlConnection connection=new SqlConnection(connectionString) ) {
803: int result;
804: connection.Open();
805: SqlCommand command=BuildIntCommand(connection, storedProcName, parameters);
806: rowsAffected=command.ExecuteNonQuery();
807: result=(int)command.Parameters["ReturnValue"].Value;
808: //Connection.Close();
809: return result;
810: }
811: }
812: /// <summary>
813: /// 创建 SqlCommand 对象实例(用来返回一个整数值)
814: /// </summary>
815: /// <param name="storedProcName">存储过程名</param>
816: /// <param name="parameters">存储过程参数</param>
817: /// <returns>SqlCommand 对象实例</returns>
818: private static SqlCommand BuildIntCommand( SqlConnection connection, string storedProcName, IDataParameter[] parameters ) {
819: SqlCommand command=BuildQueryCommand(connection, storedProcName, parameters);
820: command.Parameters.Add(new SqlParameter("ReturnValue",
821: SqlDbType.Int, 4, ParameterDirection.ReturnValue,
822: false, 0, 0, string.Empty, DataRowVersion.Default, null));
823: return command;
824: }
825: #endregion
826: }
827: }