三层架构下的多数据库连接

       


DbHelperSQLP.cs

  1.  /// <summary>  
  2. /// 编 码 人:苏飞  
  3. /// 联系方式:361983679    
  4. /// 更新网站:http://www.sufeinet.com/thread-655-1-1.html  
  5. /// </summary>  
  6. using System;  
  7. using System.Collections;  
  8. using System.Collections.Specialized;  
  9. using System.Data;  
  10. using System.Data.SqlClient;  
  11. using System.Configuration;  
  12. using System.Data.Common;  
  13. using System.Collections.Generic;  
  14. namespace Maticsoft.DBUtility  
  15. {  
  16.     /// <summary>  
  17.     /// 数据访问类,可用于访问不同数据库  
  18.     /// </summary>  
  19.     public class DbHelperSQLP  
  20.     {  
  21.         //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.       
  22.         public string connectionString = "连接字符串";     
  23.         public DbHelperSQLP()  
  24.         {              
  25.         }  
  26.         public DbHelperSQLP(string ConnectionString)  
  27.         {  
  28.             connectionString = ConnectionString;      
  29.         }  
  30.  
  31.         #region 公用方法  
  32.         /// <summary>  
  33.         /// 判断是否存在某表的某个字段  
  34.         /// </summary>  
  35.         /// <param name="tableName">表名称</param>  
  36.         /// <param name="columnName">列名称</param>  
  37.         /// <returns>是否存在</returns>  
  38.         public bool ColumnExists(string tableName, string columnName)  
  39.         {  
  40.             string sql = "select count(1) from syscolumns where [id]=object_id('" + tableName + "') and [name]='" + columnName + "'";  
  41.             object res = GetSingle(sql);  
  42.             if (res == null)  
  43.             {  
  44.                 return false;  
  45.             }  
  46.             return Convert.ToInt32(res) > 0;  
  47.         }  
  48.         public int GetMaxID(string FieldName, string TableName)  
  49.         {  
  50.             string strsql = "select max(" + FieldName + ")+1 from " + TableName;  
  51.             object obj = GetSingle(strsql);  
  52.             if (obj == null)  
  53.             {  
  54.                 return 1;  
  55.             }  
  56.             else  
  57.             {  
  58.                 return int.Parse(obj.ToString());  
  59.             }  
  60.         }  
  61.         public bool Exists(string strSql)  
  62.         {  
  63.             object obj = GetSingle(strSql);  
  64.             int cmdresult;  
  65.             if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))  
  66.             {  
  67.                 cmdresult = 0;  
  68.             }  
  69.             else  
  70.             {  
  71.                 cmdresult = int.Parse(obj.ToString());  
  72.             }  
  73.             if (cmdresult == 0)  
  74.             {  
  75.                 return false;  
  76.             }  
  77.             else  
  78.             {  
  79.                 return true;  
  80.             }  
  81.         }  
  82.         /// <summary>  
  83.         /// 表是否存在  
  84.         /// </summary>  
  85.         /// <param name="TableName"></param>  
  86.         /// <returns></returns>  
  87.         public bool TabExists(string TableName)  
  88.         {  
  89.             string strsql = "select count(*) from sysobjects where id = object_id(N'[" + TableName + "]') and OBJECTPROPERTY(id, N'IsUserTable') = 1";  
  90.             //string strsql = "SELECT count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + TableName + "]') AND type in (N'U')";  
  91.             object obj = GetSingle(strsql);  
  92.             int cmdresult;  
  93.             if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))  
  94.             {  
  95.                 cmdresult = 0;  
  96.             }  
  97.             else  
  98.             {  
  99.                 cmdresult = int.Parse(obj.ToString());  
  100.             }  
  101.             if (cmdresult == 0)  
  102.             {  
  103.                 return false;  
  104.             }  
  105.             else  
  106.             {  
  107.                 return true;  
  108.             }  
  109.         }  
  110.         public bool Exists(string strSql, params SqlParameter[] cmdParms)  
  111.         {  
  112.             object obj = GetSingle(strSql, cmdParms);  
  113.             int cmdresult;  
  114.             if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))  
  115.             {  
  116.                 cmdresult = 0;  
  117.             }  
  118.             else  
  119.             {  
  120.                 cmdresult = int.Parse(obj.ToString());  
  121.             }  
  122.             if (cmdresult == 0)  
  123.             {  
  124.                 return false;  
  125.             }  
  126.             else  
  127.             {  
  128.                 return true;  
  129.             }  
  130.         }  
  131.         #endregion  
  132.  
  133.         #region  执行简单SQL语句  
  134.   
  135.         /// <summary>  
  136.         /// 执行SQL语句,返回影响的记录数  
  137.         /// </summary>  
  138.         /// <param name="SQLString">SQL语句</param>  
  139.         /// <returns>影响的记录数</returns>  
  140.         public int ExecuteSql(string SQLString)  
  141.         {  
  142.             using (SqlConnection connection = new SqlConnection(connectionString))  
  143.             {  
  144.                 using (SqlCommand cmd = new SqlCommand(SQLString, connection))  
  145.                 {  
  146.                     try  
  147.                     {  
  148.                         connection.Open();  
  149.                         int rows = cmd.ExecuteNonQuery();  
  150.                         return rows;  
  151.                     }  
  152.                     catch (System.Data.SqlClient.SqlException e)  
  153.                     {  
  154.                         connection.Close();  
  155.                         throw e;  
  156.                     }  
  157.                 }  
  158.             }  
  159.         }  
  160.   
  161.         public int ExecuteSqlByTime(string SQLString, int Times)  
  162.         {  
  163.             using (SqlConnection connection = new SqlConnection(connectionString))  
  164.             {  
  165.                 using (SqlCommand cmd = new SqlCommand(SQLString, connection))  
  166.                 {  
  167.                     try  
  168.                     {  
  169.                         connection.Open();  
  170.                         cmd.CommandTimeout = Times;  
  171.                         int rows = cmd.ExecuteNonQuery();  
  172.                         return rows;  
  173.                     }  
  174.                     catch (System.Data.SqlClient.SqlException e)  
  175.                     {  
  176.                         connection.Close();  
  177.                         throw e;  
  178.                     }  
  179.                 }  
  180.             }  
  181.         }  
  182.         
  183.         /// <summary>  
  184.         /// 执行Sql和Oracle滴混合事务  
  185.         /// </summary>  
  186.         /// <param name="list">SQL命令行列表</param>  
  187.         /// <param name="oracleCmdSqlList">Oracle命令行列表</param>  
  188.         /// <returns>执行结果 0-由于SQL造成事务失败 -1 由于Oracle造成事务失败 1-整体事务执行成功</returns>  
  189.         public int ExecuteSqlTran(List<CommandInfo> list, List<CommandInfo> oracleCmdSqlList)  
  190.         {  
  191.             using (SqlConnection conn = new SqlConnection(connectionString))  
  192.             {  
  193.                 conn.Open();  
  194.                 SqlCommand cmd = new SqlCommand();  
  195.                 cmd.Connection = conn;  
  196.                 SqlTransaction tx = conn.BeginTransaction();  
  197.                 cmd.Transaction = tx;  
  198.                 try  
  199.                 {  
  200.                     foreach (CommandInfo myDE in list)  
  201.                     {  
  202.                         string cmdText = myDE.CommandText;  
  203.                         SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;  
  204.                         PrepareCommand(cmd, conn, tx, cmdText, cmdParms);  
  205.                         if (myDE.EffentNextType == EffentNextType.SolicitationEvent)  
  206.                         {  
  207.                             if (myDE.CommandText.ToLower().IndexOf("count(") == -1)  
  208.                             {  
  209.                                 tx.Rollback();  
  210.                                 throw new Exception("违背要求"+myDE.CommandText+"必须符合select count(..的格式");  
  211.                                 //return 0;  
  212.                             }  
  213.   
  214.                             object obj = cmd.ExecuteScalar();  
  215.                             bool isHave = false;  
  216.                             if (obj == null && obj == DBNull.Value)  
  217.                             {  
  218.                                 isHave = false;  
  219.                             }  
  220.                             isHave = Convert.ToInt32(obj) > 0;  
  221.                             if (isHave)  
  222.                             {  
  223.                                 //引发事件  
  224.                                 myDE.OnSolicitationEvent();  
  225.                             }  
  226.                         }  
  227.                         if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)  
  228.                         {  
  229.                             if (myDE.CommandText.ToLower().IndexOf("count(") == -1)  
  230.                             {  
  231.                                 tx.Rollback();  
  232.                                 throw new Exception("SQL:违背要求" + myDE.CommandText + "必须符合select count(..的格式");  
  233.                                 //return 0;  
  234.                             }  
  235.   
  236.                             object obj = cmd.ExecuteScalar();  
  237.                             bool isHave = false;  
  238.                             if (obj == null && obj == DBNull.Value)  
  239.                             {  
  240.                                 isHave = false;  
  241.                             }  
  242.                             isHave = Convert.ToInt32(obj) > 0;  
  243.   
  244.                             if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)  
  245.                             {  
  246.                                 tx.Rollback();  
  247.                                 throw new Exception("SQL:违背要求" + myDE.CommandText + "返回值必须大于0");  
  248.                                 //return 0;  
  249.                             }  
  250.                             if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)  
  251.                             {  
  252.                                 tx.Rollback();  
  253.                                 throw new Exception("SQL:违背要求" + myDE.CommandText + "返回值必须等于0");  
  254.                                 //return 0;  
  255.                             }  
  256.                             continue;  
  257.                         }  
  258.                         int val = cmd.ExecuteNonQuery();  
  259.                         if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0)  
  260.                         {  
  261.                             tx.Rollback();  
  262.                             throw new Exception("SQL:违背要求" + myDE.CommandText + "必须有影响行");  
  263.                             //return 0;  
  264.                         }  
  265.                         cmd.Parameters.Clear();  
  266.                     }  
  267.                     string oraConnectionString = PubConstant.GetConnectionString("ConnectionStringPPC");  
  268.                     bool res = OracleHelper.ExecuteSqlTran(oraConnectionString, oracleCmdSqlList);  
  269.                     if (!res)  
  270.                     {  
  271.                         tx.Rollback();  
  272.                         throw new Exception("Oracle执行失败");  
  273.                         // return -1;  
  274.                     }  
  275.                     tx.Commit();  
  276.                     return 1;  
  277.                 }  
  278.                 catch (System.Data.SqlClient.SqlException e)  
  279.                 {  
  280.                     tx.Rollback();  
  281.                     throw e;  
  282.                 }  
  283.                 catch (Exception e)  
  284.                 {  
  285.                     tx.Rollback();  
  286.                     throw e;  
  287.                 }  
  288.             }  
  289.         }          
  290.         /// <summary>  
  291.         /// 执行多条SQL语句,实现数据库事务。  
  292.         /// </summary>  
  293.         /// <param name="SQLStringList">多条SQL语句</param>       
  294.         public int ExecuteSqlTran(List<String> SQLStringList)  
  295.         {  
  296.             using (SqlConnection conn = new SqlConnection(connectionString))  
  297.             {  
  298.                 conn.Open();  
  299.                 SqlCommand cmd = new SqlCommand();  
  300.                 cmd.Connection = conn;  
  301.                 SqlTransaction tx = conn.BeginTransaction();  
  302.                 cmd.Transaction = tx;  
  303.                 try  
  304.                 {  
  305.                     int count = 0;  
  306.                     for (int n = 0; n < SQLStringList.Count; n++)  
  307.                     {  
  308.                         string strsql = SQLStringList[n];  
  309.                         if (strsql.Trim().Length > 1)  
  310.                         {  
  311.                             cmd.CommandText = strsql;  
  312.                             count += cmd.ExecuteNonQuery();  
  313.                         }  
  314.                     }  
  315.                     tx.Commit();  
  316.                     return count;  
  317.                 }  
  318.                 catch  
  319.                 {  
  320.                     tx.Rollback();  
  321.                     return 0;  
  322.                 }  
  323.             }  
  324.         }  
  325.         /// <summary>  
  326.         /// 执行带一个存储过程参数的的SQL语句。  
  327.         /// </summary>  
  328.         /// <param name="SQLString">SQL语句</param>  
  329.         /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>  
  330.         /// <returns>影响的记录数</returns>  
  331.         public int ExecuteSql(string SQLString, string content)  
  332.         {  
  333.             using (SqlConnection connection = new SqlConnection(connectionString))  
  334.             {  
  335.                 SqlCommand cmd = new SqlCommand(SQLString, connection);  
  336.                 System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);  
  337.                 myParameter.Value = content;  
  338.                 cmd.Parameters.Add(myParameter);  
  339.                 try  
  340.                 {  
  341.                     connection.Open();  
  342.                     int rows = cmd.ExecuteNonQuery();  
  343.                     return rows;  
  344.                 }  
  345.                 catch (System.Data.SqlClient.SqlException e)  
  346.                 {  
  347.                     throw e;  
  348.                 }  
  349.                 finally  
  350.                 {  
  351.                     cmd.Dispose();  
  352.                     connection.Close();  
  353.                 }  
  354.             }  
  355.         }  
  356.         /// <summary>  
  357.         /// 执行带一个存储过程参数的的SQL语句。  
  358.         /// </summary>  
  359.         /// <param name="SQLString">SQL语句</param>  
  360.         /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>  
  361.         /// <returns>影响的记录数</returns>  
  362.         public object ExecuteSqlGet(string SQLString, string content)  
  363.         {  
  364.             using (SqlConnection connection = new SqlConnection(connectionString))  
  365.             {  
  366.                 SqlCommand cmd = new SqlCommand(SQLString, connection);  
  367.                 System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);  
  368.                 myParameter.Value = content;  
  369.                 cmd.Parameters.Add(myParameter);  
  370.                 try  
  371.                 {  
  372.                     connection.Open();  
  373.                     object obj = cmd.ExecuteScalar();  
  374.                     if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))  
  375.                     {  
  376.                         return null;  
  377.                     }  
  378.                     else  
  379.                     {  
  380.                         return obj;  
  381.                     }  
  382.                 }  
  383.                 catch (System.Data.SqlClient.SqlException e)  
  384.                 {  
  385.                     throw e;  
  386.                 }  
  387.                 finally  
  388.                 {  
  389.                     cmd.Dispose();  
  390.                     connection.Close();  
  391.                 }  
  392.             }  
  393.         }  
  394.         /// <summary>  
  395.         /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)  
  396.         /// </summary>  
  397.         /// <param name="strSQL">SQL语句</param>  
  398.         /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>  
  399.         /// <returns>影响的记录数</returns>  
  400.         public int ExecuteSqlInsertImg(string strSQL, byte[] fs)  
  401.         {  
  402.             using (SqlConnection connection = new SqlConnection(connectionString))  
  403.             {  
  404.                 SqlCommand cmd = new SqlCommand(strSQL, connection);  
  405.                 System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@fs", SqlDbType.Image);  
  406.                 myParameter.Value = fs;  
  407.                 cmd.Parameters.Add(myParameter);  
  408.                 try  
  409.                 {  
  410.                     connection.Open();  
  411.                     int rows = cmd.ExecuteNonQuery();  
  412.                     return rows;  
  413.                 }  
  414.                 catch (System.Data.SqlClient.SqlException e)  
  415.                 {  
  416.                     throw e;  
  417.                 }  
  418.                 finally  
  419.                 {  
  420.                     cmd.Dispose();  
  421.                     connection.Close();  
  422.                 }  
  423.             }  
  424.         }  
  425.   
  426.         /// <summary>  
  427.         /// 执行一条计算查询结果语句,返回查询结果(object)。  
  428.         /// </summary>  
  429.         /// <param name="SQLString">计算查询结果语句</param>  
  430.         /// <returns>查询结果(object)</returns>  
  431.         public object GetSingle(string SQLString)  
  432.         {  
  433.             using (SqlConnection connection = new SqlConnection(connectionString))  
  434.             {  
  435.                 using (SqlCommand cmd = new SqlCommand(SQLString, connection))  
  436.                 {  
  437.                     try  
  438.                     {  
  439.                         connection.Open();  
  440.                         object obj = cmd.ExecuteScalar();  
  441.                         if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))  
  442.                         {  
  443.                             return null;  
  444.                         }  
  445.                         else  
  446.                         {  
  447.                             return obj;  
  448.                         }  
  449.                     }  
  450.                     catch (System.Data.SqlClient.SqlException e)  
  451.                     {  
  452.                         connection.Close();  
  453.                         throw e;  
  454.                     }  
  455.                 }  
  456.             }  
  457.         }  
  458.         public object GetSingle(string SQLString, int Times)  
  459.         {  
  460.             using (SqlConnection connection = new SqlConnection(connectionString))  
  461.             {  
  462.                 using (SqlCommand cmd = new SqlCommand(SQLString, connection))  
  463.                 {  
  464.                     try  
  465.                     {  
  466.                         connection.Open();  
  467.                         cmd.CommandTimeout = Times;  
  468.                         object obj = cmd.ExecuteScalar();  
  469.                         if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))  
  470.                         {  
  471.                             return null;  
  472.                         }  
  473.                         else  
  474.                         {  
  475.                             return obj;  
  476.                         }  
  477.                     }  
  478.                     catch (System.Data.SqlClient.SqlException e)  
  479.                     {  
  480.                         connection.Close();  
  481.                         throw e;  
  482.                     }  
  483.                 }  
  484.             }  
  485.         }  
  486.         /// <summary>  
  487.         /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )  
  488.         /// </summary>  
  489.         /// <param name="strSQL">查询语句</param>  
  490.         /// <returns>SqlDataReader</returns>  
  491.         public SqlDataReader ExecuteReader(string strSQL)  
  492.         {  
  493.             SqlConnection connection = new SqlConnection(connectionString);  
  494.             SqlCommand cmd = new SqlCommand(strSQL, connection);  
  495.             try  
  496.             {  
  497.                 connection.Open();  
  498.                 SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);  
  499.                 return myReader;  
  500.             }  
  501.             catch (System.Data.SqlClient.SqlException e)  
  502.             {  
  503.                 throw e;  
  504.             }     
  505.   
  506.         }  
  507.         /// <summary>  
  508.         /// 执行查询语句,返回DataSet  
  509.         /// </summary>  
  510.         /// <param name="SQLString">查询语句</param>  
  511.         /// <returns>DataSet</returns>  
  512.         public DataSet Query(string SQLString)  
  513.         {  
  514.             using (SqlConnection connection = new SqlConnection(connectionString))  
  515.             {  
  516.                 DataSet ds = new DataSet();  
  517.                 try  
  518.                 {  
  519.                     connection.Open();  
  520.                     SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);  
  521.                     command.Fill(ds, "ds");  
  522.                 }  
  523.                 catch (System.Data.SqlClient.SqlException ex)  
  524.                 {  
  525.                     throw new Exception(ex.Message);  
  526.                 }  
  527.                 return ds;  
  528.             }  
  529.         }  
  530.         public DataSet Query(string SQLString, int Times)  
  531.         {  
  532.             using (SqlConnection connection = new SqlConnection(connectionString))  
  533.             {  
  534.                 DataSet ds = new DataSet();  
  535.                 try  
  536.                 {  
  537.                     connection.Open();  
  538.                     SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);  
  539.                     command.SelectCommand.CommandTimeout = Times;  
  540.                     command.Fill(ds, "ds");  
  541.                 }  
  542.                 catch (System.Data.SqlClient.SqlException ex)  
  543.                 {  
  544.                     throw new Exception(ex.Message);  
  545.                 }  
  546.                 return ds;  
  547.             }  
  548.         }  
  549.  
  550.  
  551.  
  552.         #endregion  
  553.  
  554.         #region 执行带参数的SQL语句  
  555.   
  556.         /// <summary>  
  557.         /// 执行SQL语句,返回影响的记录数  
  558.         /// </summary>  
  559.         /// <param name="SQLString">SQL语句</param>  
  560.         /// <returns>影响的记录数</returns>  
  561.         public int ExecuteSql(string SQLString, params SqlParameter[] cmdParms)  
  562.         {  
  563.             using (SqlConnection connection = new SqlConnection(connectionString))  
  564.             {  
  565.                 using (SqlCommand cmd = new SqlCommand())  
  566.                 {  
  567.                     try  
  568.                     {  
  569.                         PrepareCommand(cmd, connection, null, SQLString, cmdParms);  
  570.                         int rows = cmd.ExecuteNonQuery();  
  571.                         cmd.Parameters.Clear();  
  572.                         return rows;  
  573.                     }  
  574.                     catch (System.Data.SqlClient.SqlException e)  
  575.                     {  
  576.                         throw e;  
  577.                     }  
  578.                 }  
  579.             }  
  580.         }  
  581.   
  582.   
  583.         /// <summary>  
  584.         /// 执行多条SQL语句,实现数据库事务。  
  585.         /// </summary>  
  586.         /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>  
  587.         public void ExecuteSqlTran(Hashtable SQLStringList)  
  588.         {  
  589.             using (SqlConnection conn = new SqlConnection(connectionString))  
  590.             {  
  591.                 conn.Open();  
  592.                 using (SqlTransaction trans = conn.BeginTransaction())  
  593.                 {  
  594.                     SqlCommand cmd = new SqlCommand();  
  595.                     try  
  596.                     {  
  597.                         //循环  
  598.                         foreach (DictionaryEntry myDE in SQLStringList)  
  599.                         {  
  600.                             string cmdText = myDE.Key.ToString();  
  601.                             SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;  
  602.                             PrepareCommand(cmd, conn, trans, cmdText, cmdParms);  
  603.                             int val = cmd.ExecuteNonQuery();  
  604.                             cmd.Parameters.Clear();  
  605.                         }  
  606.                         trans.Commit();  
  607.                     }  
  608.                     catch  
  609.                     {  
  610.                         trans.Rollback();  
  611.                         throw;  
  612.                     }  
  613.                 }  
  614.             }  
  615.         }  
  616.         /// <summary>  
  617.         /// 执行多条SQL语句,实现数据库事务。  
  618.         /// </summary>  
  619.         /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>  
  620.         public int ExecuteSqlTran(System.Collections.Generic.List<CommandInfo> cmdList)  
  621.         {  
  622.             using (SqlConnection conn = new SqlConnection(connectionString))  
  623.             {  
  624.                 conn.Open();  
  625.                 using (SqlTransaction trans = conn.BeginTransaction())  
  626.                 {  
  627.                     SqlCommand cmd = new SqlCommand();  
  628.                     try  
  629.                     { int count = 0;  
  630.                         //循环  
  631.                         foreach (CommandInfo myDE in cmdList)  
  632.                         {  
  633.                             string cmdText = myDE.CommandText;  
  634.                             SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;  
  635.                             PrepareCommand(cmd, conn, trans, cmdText, cmdParms);  
  636.                              
  637.                             if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)  
  638.                             {  
  639.                                 if (myDE.CommandText.ToLower().IndexOf("count(") == -1)  
  640.                                 {  
  641.                                     trans.Rollback();  
  642.                                     return 0;  
  643.                                 }  
  644.   
  645.                                 object obj = cmd.ExecuteScalar();  
  646.                                 bool isHave = false;  
  647.                                 if (obj == null && obj == DBNull.Value)  
  648.                                 {  
  649.                                     isHave = false;  
  650.                                 }  
  651.                                 isHave = Convert.ToInt32(obj) > 0;  
  652.   
  653.                                 if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)  
  654.                                 {  
  655.                                     trans.Rollback();  
  656.                                     return 0;  
  657.                                 }  
  658.                                 if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)  
  659.                                 {  
  660.                                     trans.Rollback();  
  661.                                     return 0;  
  662.                                 }  
  663.                                 continue;  
  664.                             }  
  665.                             int val = cmd.ExecuteNonQuery();  
  666.                             count += val;  
  667.                             if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0)  
  668.                             {  
  669.                                 trans.Rollback();  
  670.                                 return 0;  
  671.                             }  
  672.                             cmd.Parameters.Clear();  
  673.                         }  
  674.                         trans.Commit();  
  675.                         return count;  
  676.                     }  
  677.                     catch  
  678.                     {  
  679.                         trans.Rollback();  
  680.                         throw;  
  681.                     }  
  682.                 }  
  683.             }  
  684.         }  
  685.         /// <summary>  
  686.         /// 执行多条SQL语句,实现数据库事务。  
  687.         /// </summary>  
  688.         /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>  
  689.         public void ExecuteSqlTranWithIndentity(System.Collections.Generic.List<CommandInfo> SQLStringList)  
  690.         {  
  691.             using (SqlConnection conn = new SqlConnection(connectionString))  
  692.             {  
  693.                 conn.Open();  
  694.                 using (SqlTransaction trans = conn.BeginTransaction())  
  695.                 {  
  696.                     SqlCommand cmd = new SqlCommand();  
  697.                     try  
  698.                     {  
  699.                         int indentity = 0;  
  700.                         //循环  
  701.                         foreach (CommandInfo myDE in SQLStringList)  
  702.                         {  
  703.                             string cmdText = myDE.CommandText;  
  704.                             SqlParameter[] cmdParms = (SqlParameter[])myDE.Parameters;  
  705.                             foreach (SqlParameter q in cmdParms)  
  706.                             {  
  707.                                 if (q.Direction == ParameterDirection.InputOutput)  
  708.                                 {  
  709.                                     q.Value = indentity;  
  710.                                 }  
  711.                             }  
  712.                             PrepareCommand(cmd, conn, trans, cmdText, cmdParms);  
  713.                             int val = cmd.ExecuteNonQuery();  
  714.                             foreach (SqlParameter q in cmdParms)  
  715.                             {  
  716.                                 if (q.Direction == ParameterDirection.Output)  
  717.                                 {  
  718.                                     indentity = Convert.ToInt32(q.Value);  
  719.                                 }  
  720.                             }  
  721.                             cmd.Parameters.Clear();  
  722.                         }  
  723.                         trans.Commit();  
  724.                     }  
  725.                     catch  
  726.                     {  
  727.                         trans.Rollback();  
  728.                         throw;  
  729.                     }  
  730.                 }  
  731.             }  
  732.         }  
  733.         /// <summary>  
  734.         /// 执行多条SQL语句,实现数据库事务。  
  735.         /// </summary>  
  736.         /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>  
  737.         public void ExecuteSqlTranWithIndentity(Hashtable SQLStringList)  
  738.         {  
  739.             using (SqlConnection conn = new SqlConnection(connectionString))  
  740.             {  
  741.                 conn.Open();  
  742.                 using (SqlTransaction trans = conn.BeginTransaction())  
  743.                 {  
  744.                     SqlCommand cmd = new SqlCommand();  
  745.                     try  
  746.                     {  
  747.                         int indentity = 0;  
  748.                         //循环  
  749.                         foreach (DictionaryEntry myDE in SQLStringList)  
  750.                         {  
  751.                             string cmdText = myDE.Key.ToString();  
  752.                             SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;  
  753.                             foreach (SqlParameter q in cmdParms)  
  754.                             {  
  755.                                 if (q.Direction == ParameterDirection.InputOutput)  
  756.                                 {  
  757.                                     q.Value = indentity;  
  758.                                 }  
  759.                             }  
  760.                             PrepareCommand(cmd, conn, trans, cmdText, cmdParms);  
  761.                             int val = cmd.ExecuteNonQuery();  
  762.                             foreach (SqlParameter q in cmdParms)  
  763.                             {  
  764.                                 if (q.Direction == ParameterDirection.Output)  
  765.                                 {  
  766.                                     indentity = Convert.ToInt32(q.Value);  
  767.                                 }  
  768.                             }  
  769.                             cmd.Parameters.Clear();  
  770.                         }  
  771.                         trans.Commit();  
  772.                     }  
  773.                     catch  
  774.                     {  
  775.                         trans.Rollback();  
  776.                         throw;  
  777.                     }  
  778.                 }  
  779.             }  
  780.         }  
  781.         /// <summary>  
  782.         /// 执行一条计算查询结果语句,返回查询结果(object)。  
  783.         /// </summary>  
  784.         /// <param name="SQLString">计算查询结果语句</param>  
  785.         /// <returns>查询结果(object)</returns>  
  786.         public object GetSingle(string SQLString, params SqlParameter[] cmdParms)  
  787.         {  
  788.             using (SqlConnection connection = new SqlConnection(connectionString))  
  789.             {  
  790.                 using (SqlCommand cmd = new SqlCommand())  
  791.                 {  
  792.                     try  
  793.                     {  
  794.                         PrepareCommand(cmd, connection, null, SQLString, cmdParms);  
  795.                         object obj = cmd.ExecuteScalar();  
  796.                         cmd.Parameters.Clear();  
  797.                         if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))  
  798.                         {  
  799.                             return null;  
  800.                         }  
  801.                         else  
  802.                         {  
  803.                             return obj;  
  804.                         }  
  805.                     }  
  806.                     catch (System.Data.SqlClient.SqlException e)  
  807.                     {  
  808.                         throw e;  
  809.                     }  
  810.                 }  
  811.             }  
  812.         }  
  813.   
  814.         /// <summary>  
  815.         /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )  
  816.         /// </summary>  
  817.         /// <param name="strSQL">查询语句</param>  
  818.         /// <returns>SqlDataReader</returns>  
  819.         public SqlDataReader ExecuteReader(string SQLString, params SqlParameter[] cmdParms)  
  820.         {  
  821.             SqlConnection connection = new SqlConnection(connectionString);  
  822.             SqlCommand cmd = new SqlCommand();  
  823.             try  
  824.             {  
  825.                 PrepareCommand(cmd, connection, null, SQLString, cmdParms);  
  826.                 SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);  
  827.                 cmd.Parameters.Clear();  
  828.                 return myReader;  
  829.             }  
  830.             catch (System.Data.SqlClient.SqlException e)  
  831.             {  
  832.                 throw e;  
  833.             }  
  834.             //          finally  
  835.             //          {  
  836.             //              cmd.Dispose();  
  837.             //              connection.Close();  
  838.             //          }     
  839.   
  840.         }  
  841.   
  842.         /// <summary>  
  843.         /// 执行查询语句,返回DataSet  
  844.         /// </summary>  
  845.         /// <param name="SQLString">查询语句</param>  
  846.         /// <returns>DataSet</returns>  
  847.         public DataSet Query(string SQLString, params SqlParameter[] cmdParms)  
  848.         {  
  849.             using (SqlConnection connection = new SqlConnection(connectionString))  
  850.             {  
  851.                 SqlCommand cmd = new SqlCommand();  
  852.                 PrepareCommand(cmd, connection, null, SQLString, cmdParms);  
  853.                 using (SqlDataAdapter da = new SqlDataAdapter(cmd))  
  854.                 {  
  855.                     DataSet ds = new DataSet();  
  856.                     try  
  857.                     {  
  858.                         da.Fill(ds, "ds");  
  859.                         cmd.Parameters.Clear();  
  860.                     }  
  861.                     catch (System.Data.SqlClient.SqlException ex)  
  862.                     {  
  863.                         throw new Exception(ex.Message);  
  864.                     }  
  865.                     return ds;  
  866.                 }  
  867.             }  
  868.         }  
  869.   
  870.   
  871.         private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)  
  872.         {  
  873.             if (conn.State != ConnectionState.Open)  
  874.                 conn.Open();  
  875.             cmd.Connection = conn;  
  876.             cmd.CommandText = cmdText;  
  877.             if (trans != null)  
  878.                 cmd.Transaction = trans;  
  879.             cmd.CommandType = CommandType.Text;//cmdType;  
  880.             if (cmdParms != null)  
  881.             {  
  882.   
  883.   
  884.                 foreach (SqlParameter parameter in cmdParms)  
  885.                 {  
  886.                     if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&  
  887.                         (parameter.Value == null))  
  888.                     {  
  889.                         parameter.Value = DBNull.Value;  
  890.                     }  
  891.                     cmd.Parameters.Add(parameter);  
  892.                 }  
  893.             }  
  894.         }  
  895.  
  896.         #endregion  
  897.  
  898.         #region 存储过程操作  
  899.   
  900.         /// <summary>  
  901.         /// 执行存储过程,返回SqlDataReader  ( 注意:调用该方法后,一定要对SqlDataReader进行Close )  
  902.         /// </summary>  
  903.         /// <param name="storedProcName">存储过程名</param>  
  904.         /// <param name="parameters">存储过程参数</param>  
  905.         /// <returns>SqlDataReader</returns>  
  906.         public SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters)  
  907.         {  
  908.             using (SqlConnection connection = new SqlConnection(connectionString))  
  909.             {  
  910.                 SqlDataReader returnReader;  
  911.                 connection.Open();  
  912.                 SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);  
  913.                 command.CommandType = CommandType.StoredProcedure;  
  914.                 returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);  
  915.                 return returnReader;  
  916.             }  
  917.         }  
  918.   
  919.   
  920.         /// <summary>  
  921.         /// 执行存储过程  
  922.         /// </summary>  
  923.         /// <param name="storedProcName">存储过程名</param>  
  924.         /// <param name="parameters">存储过程参数</param>  
  925.         /// <param name="tableName">DataSet结果中的表名</param>  
  926.         /// <returns>DataSet</returns>  
  927.         public DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)  
  928.         {  
  929.             using (SqlConnection connection = new SqlConnection(connectionString))  
  930.             {  
  931.                 DataSet dataSet = new DataSet();  
  932.                 connection.Open();  
  933.                 SqlDataAdapter sqlDA = new SqlDataAdapter();  
  934.                 sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);  
  935.                 sqlDA.Fill(dataSet, tableName);  
  936.                 connection.Close();  
  937.                 return dataSet;  
  938.             }  
  939.         }  
  940.         public DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName, int Times)  
  941.         {  
  942.             using (SqlConnection connection = new SqlConnection(connectionString))  
  943.             {  
  944.                 DataSet dataSet = new DataSet();  
  945.                 connection.Open();  
  946.                 SqlDataAdapter sqlDA = new SqlDataAdapter();  
  947.                 sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);  
  948.                 sqlDA.SelectCommand.CommandTimeout = Times;  
  949.                 sqlDA.Fill(dataSet, tableName);  
  950.                 connection.Close();  
  951.                 return dataSet;  
  952.             }  
  953.         }  
  954.   
  955.   
  956.         /// <summary>  
  957.         /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)  
  958.         /// </summary>  
  959.         /// <param name="connection">数据库连接</param>  
  960.         /// <param name="storedProcName">存储过程名</param>  
  961.         /// <param name="parameters">存储过程参数</param>  
  962.         /// <returns>SqlCommand</returns>  
  963.         private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)  
  964.         {  
  965.             SqlCommand command = new SqlCommand(storedProcName, connection);  
  966.             command.CommandType = CommandType.StoredProcedure;  
  967.             foreach (SqlParameter parameter in parameters)  
  968.             {  
  969.                 if (parameter != null)  
  970.                 {  
  971.                     // 检查未分配值的输出参数,将其分配以DBNull.Value.  
  972.                     if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&  
  973.                         (parameter.Value == null))  
  974.                     {  
  975.                         parameter.Value = DBNull.Value;  
  976.                     }  
  977.                     command.Parameters.Add(parameter);  
  978.                 }  
  979.             }  
  980.   
  981.             return command;  
  982.         }  
  983.   
  984.         /// <summary>  
  985.         /// 执行存储过程,返回影响的行数        
  986.         /// </summary>  
  987.         /// <param name="storedProcName">存储过程名</param>  
  988.         /// <param name="parameters">存储过程参数</param>  
  989.         /// <param name="rowsAffected">影响的行数</param>  
  990.         /// <returns></returns>  
  991.         public int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected)  
  992.         {  
  993.             using (SqlConnection connection = new SqlConnection(connectionString))  
  994.             {  
  995.                 int result;  
  996.                 connection.Open();  
  997.                 SqlCommand command = BuildIntCommand(connection, storedProcName, parameters);  
  998.                 rowsAffected = command.ExecuteNonQuery();  
  999.                 result = (int)command.Parameters["ReturnValue"].Value;  
  1000.                 //Connection.Close();  
  1001.                 return result;  
  1002.             }  
  1003.         }  
  1004.   
  1005.         /// <summary>  
  1006.         /// 创建 SqlCommand 对象实例(用来返回一个整数值)     
  1007.         /// </summary>  
  1008.         /// <param name="storedProcName">存储过程名</param>  
  1009.         /// <param name="parameters">存储过程参数</param>  
  1010.         /// <returns>SqlCommand 对象实例</returns>  
  1011.         private static SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)  
  1012.         {  
  1013.             SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);  
  1014.             command.Parameters.Add(new SqlParameter("ReturnValue",  
  1015.                 SqlDbType.Int, 4, ParameterDirection.ReturnValue,  
  1016.                 false, 0, 0, string.Empty, DataRowVersion.Default, null));  
  1017.             return command;  
  1018.         }  
  1019.         #endregion  
  1020.   
  1021.     }  
  1022.   
  1023. }  


参考站点:http://tool.sufeinet.com/
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值