zoukankan      html  css  js  c++  java
  • FoolWeb 各层代码实例

    未命名

    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: }
  • 相关阅读:
    HIVE(2) 之 常用函数
    HIVE的Shell操作
    HIVE常用函数(1)聚合函数和序列函数
    版本控制系统之SVN和GIT的区别
    【PyQt5】信号与槽+装饰器定义槽函数
    【PyQt5】信号与槽+多线程
    【PyQt5】信号与槽用法进阶
    【PyQt5】信号与槽用法入门
    【python之路】【5、函数学习】带装饰器的函数作业【老男孩第2期全栈】
    【python之路】【4、文件操作】数据类型、文件操作-作业 用文件储存三级菜单并执行
  • 原文地址:https://www.cnblogs.com/binghe875/p/2257399.html
Copyright © 2011-2022 走看看