zoukankan      html  css  js  c++  java
  • SqlHelper工具类

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