• 实用的SqlHelper类


    代码
      1 using System;
      2 using System.Collections.Generic;
      3 using System.Text;
      4 using System.Data;
      5 using System.Data.SqlClient;
      6 using System.Collections;
      7 
      8 namespace SystemDAO
      9 {
     10     /// <summary>
     11     /// 数据库的通用访问代码 
     12     /// 
     13     /// 此类为抽象类,
     14     /// 不允许实例化,在应用时直接调用即可
     15     /// </summary>
     16     public abstract class SqlHelper
     17     {
     18         /// <summary>
     19         /// 数据库连接字符串
     20         /// </summary>
     21 
     22         public static readonly string connectionString = System.Configuration.ConfigurationSettings.AppSettings["con"].ToString().Trim();
     23         // Hashtable to store cached parameters
     24         private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
     25 
     26         #region//ExecteNonQuery方法
     27 
     28         /// <summary>
     29         ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
     30         /// 使用参数数组形式提供参数列表 
     31         /// </summary>
     32         /// <param name="connectionString">一个有效的数据库连接字符串</param>
     33         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
     34         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
     35         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
     36         /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
     37         public static int ExecteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
     38         {
     39             SqlCommand cmd = new SqlCommand();
     40             using (SqlConnection conn = new SqlConnection(connectionString))
     41             {
     42                 //通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中
     43                 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
     44                 int val = cmd.ExecuteNonQuery();
     45                 //清空SqlCommand中的参数列表
     46                 cmd.Parameters.Clear();
     47                 return val;
     48             }
     49         }
     50 
     51         /// <summary>
     52         ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
     53         /// 使用参数数组形式提供参数列表 
     54         /// </summary>
     55         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
     56         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
     57         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
     58         /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
     59         public static int ExecteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
     60         {
     61             return ExecteNonQuery(connectionString ,cmdType, cmdText, commandParameters);
     62         }
     63 
     64         /// <summary>
     65         ///存储过程专用
     66         /// </summary>
     67         /// <param name="cmdText">存储过程的名字</param>
     68         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
     69         /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
     70         public static int ExecteNonQueryProducts(string cmdText, params SqlParameter[] commandParameters)
     71         {
     72             return ExecteNonQuery(CommandType.StoredProcedure, cmdText, commandParameters);
     73         }
     74 
     75         /// <summary>
     76         ///Sql语句专用
     77         /// </summary>
     78         /// <param name="cmdText">T_Sql语句</param>
     79         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
     80         /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
     81         public static int ExecteNonQueryText(string cmdText, params SqlParameter[] commandParameters)
     82         {
     83             return ExecteNonQuery(CommandType.Text, cmdText, commandParameters);
     84         }
     85 
     86         #endregion
     87         #region//GetTable方法
     88 
     89         /// <summary>
     90         /// 执行一条返回结果集的SqlCommand,通过一个已经存在的数据库连接
     91         /// 使用参数数组提供参数
     92         /// </summary>
     93         /// <param name="connecttionString">一个现有的数据库连接</param>
     94         /// <param name="cmdTye">SqlCommand命令类型</param>
     95         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
     96         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
     97         /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>
     98         public static DataTableCollection GetTable(string connecttionString, CommandType cmdTye, string cmdText, SqlParameter[] commandParameters)
     99         {
    100             SqlCommand cmd = new SqlCommand();
    101             DataSet ds = new DataSet();
    102             using (SqlConnection conn = new SqlConnection(connecttionString))
    103             {
    104                 PrepareCommand(cmd, conn, null, cmdTye, cmdText, commandParameters);
    105                 SqlDataAdapter adapter = new SqlDataAdapter();
    106                 adapter.SelectCommand = cmd;
    107                 adapter.Fill(ds);
    108             }
    109             DataTableCollection table = ds.Tables;
    110             return table;
    111         }
    112 
    113         /// <summary>
    114         /// 执行一条返回结果集的SqlCommand,通过一个已经存在的数据库连接
    115         /// 使用参数数组提供参数
    116         /// </summary>
    117         /// <param name="cmdTye">SqlCommand命令类型</param>
    118         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
    119         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    120         /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>
    121         public static DataTableCollection GetTable(CommandType cmdTye, string cmdText, SqlParameter[] commandParameters)
    122         {
    123             return GetTable(cmdTye, cmdText, commandParameters);
    124         }
    125 
    126 
    127         /// <summary>
    128         /// 存储过程专用
    129         /// </summary>
    130         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
    131         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    132         /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>
    133         public static DataTableCollection GetTableProducts(string cmdText, SqlParameter[] commandParameters)
    134         {
    135             return GetTable(CommandType.StoredProcedure, cmdText, commandParameters);
    136         }
    137 
    138         /// <summary>
    139         /// Sql语句专用
    140         /// </summary>
    141         /// <param name="cmdText"> T-SQL 语句</param>
    142         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    143         /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>
    144         public static DataTableCollection GetTableText(string cmdText, SqlParameter[] commandParameters)
    145         {
    146             return GetTable(CommandType.Text, cmdText, commandParameters);
    147         }
    148         #endregion
    149 
    150 
    151         /// <summary>
    152         /// 为执行命令准备参数
    153         /// </summary>
    154         /// <param name="cmd">SqlCommand 命令</param>
    155         /// <param name="conn">已经存在的数据库连接</param>
    156         /// <param name="trans">数据库事物处理</param>
    157         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
    158         /// <param name="cmdText">Command text,T-SQL语句 例如 Select * from Products</param>
    159         /// <param name="cmdParms">返回带参数的命令</param>
    160         private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
    161         {
    162             //判断数据库连接状态
    163             if (conn.State != ConnectionState.Open)
    164                 conn.Open();
    165             cmd.Connection = conn;
    166             cmd.CommandText = cmdText;
    167             //判断是否需要事物处理
    168             if (trans != null)
    169                 cmd.Transaction = trans;
    170             cmd.CommandType = cmdType;
    171             if (cmdParms != null)
    172             {
    173                 foreach (SqlParameter parm in cmdParms)
    174                     cmd.Parameters.Add(parm);
    175             }
    176         }
    177 
    178         /// <summary>
    179         /// Execute a SqlCommand that returns a resultset against the database specified in the connection string 
    180         /// using the provided parameters.
    181         /// </summary>
    182         /// <param name="connectionString">一个有效的数据库连接字符串</param>
    183         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
    184         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
    185         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    186         /// <returns>A SqlDataReader containing the results</returns>
    187         public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    188         {
    189             SqlCommand cmd = new SqlCommand();
    190             SqlConnection conn = new SqlConnection(connectionString);
    191             // we use a try/catch here because if the method throws an exception we want to 
    192             // close the connection throw code, because no datareader will exist, hence the 
    193             // commandBehaviour.CloseConnection will not work
    194             try
    195             {
    196                 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
    197                 SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    198                 cmd.Parameters.Clear();
    199                 return rdr;
    200             }
    201             catch
    202             {
    203                 conn.Close();
    204                 throw;
    205             }
    206         }
    207         #region//ExecuteDataSet方法
    208 
    209         /// <summary>
    210         /// return a dataset
    211         /// </summary>
    212         /// <param name="connectionString">一个有效的数据库连接字符串</param>
    213         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
    214         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
    215         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    216         /// <returns>return a dataset</returns>
    217         public static DataSet ExecuteDataSet(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    218         {
    219             SqlConnection conn = new SqlConnection(connectionString);
    220             SqlCommand cmd = new SqlCommand();
    221             try
    222             {
    223                 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
    224                 SqlDataAdapter da = new SqlDataAdapter();
    225                 DataSet ds = new DataSet();
    226                 da.SelectCommand = cmd;
    227                 da.Fill(ds);
    228                 return ds;
    229             }
    230             catch
    231             {
    232                 conn.Close();
    233                 throw;
    234             }
    235         }
    236 
    237 
    238         /// <summary>
    239         /// 返回一个DataSet
    240         /// </summary>
    241         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
    242         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
    243         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    244         /// <returns>return a dataset</returns>
    245         public static DataSet ExecuteDataSet(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    246         {
    247             return ExecuteDataSet(connectionString, cmdType, cmdText, commandParameters);
    248         }
    249 
    250         /// <summary>
    251         /// 返回一个DataSet
    252         /// </summary>
    253         /// <param name="cmdText">存储过程的名字</param>
    254         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    255         /// <returns>return a dataset</returns>
    256         public static DataSet ExecuteDataSetProducts(string cmdText, params SqlParameter[] commandParameters)
    257         {
    258             return ExecuteDataSet(connectionString, CommandType.StoredProcedure, cmdText, commandParameters);
    259         }
    260 
    261         /// <summary>
    262         /// 返回一个DataSet
    263         /// </summary>
    264 
    265         /// <param name="cmdText">T-SQL 语句</param>
    266         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    267         /// <returns>return a dataset</returns>
    268         public static DataSet ExecuteDataSetText(string cmdText, params SqlParameter[] commandParameters)
    269         {
    270             return ExecuteDataSet(connectionString, CommandType.Text, cmdText, commandParameters);
    271         }
    272 
    273 
    274         public static DataView ExecuteDataSet(string connectionString, string sortExpression, string direction, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    275         {
    276             SqlConnection conn = new SqlConnection(connectionString);
    277             SqlCommand cmd = new SqlCommand();
    278             try
    279             {
    280                 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
    281                 SqlDataAdapter da = new SqlDataAdapter();
    282                 DataSet ds = new DataSet();
    283                 da.SelectCommand = cmd;
    284                 da.Fill(ds);
    285                 DataView dv = ds.Tables[0].DefaultView;
    286                 dv.Sort = sortExpression + " " + direction;
    287                 return dv;
    288             }
    289             catch
    290             {
    291                 conn.Close();
    292                 throw;
    293             }
    294         }
    295         #endregion
    296 
    297 
    298         #region // ExecuteScalar方法
    299 
    300 
    301         /// <summary>
    302         /// 返回第一行的第一列
    303         /// </summary>
    304         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
    305         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
    306         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    307         /// <returns>返回一个对象</returns>
    308         public static object ExecuteScalar(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    309         {
    310             return ExecuteScalar(SqlHelper.connectionString, cmdType, cmdText, commandParameters);
    311         }
    312 
    313         /// <summary>
    314         /// 返回第一行的第一列存储过程专用
    315         /// </summary>
    316         /// <param name="cmdText">存储过程的名字</param>
    317         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    318         /// <returns>返回一个对象</returns>
    319         public static object ExecuteScalarProducts(string cmdText, params SqlParameter[] commandParameters)
    320         {
    321             return ExecuteScalar(SqlHelper.connectionString, CommandType.StoredProcedure, cmdText, commandParameters);
    322         }
    323 
    324         /// <summary>
    325         /// 返回第一行的第一列Sql语句专用
    326         /// </summary>
    327         /// <param name="cmdText">者 T-SQL 语句</param>
    328         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    329         /// <returns>返回一个对象</returns>
    330         public static object ExecuteScalarText(string cmdText, params SqlParameter[] commandParameters)
    331         {
    332             return ExecuteScalar(SqlHelper.connectionString, CommandType.Text, cmdText, commandParameters);
    333         }
    334 
    335         /// <summary>
    336         /// Execute a SqlCommand that returns the first column of the first record against the database specified in the connection string 
    337         /// using the provided parameters.
    338         /// </summary>
    339         /// <remarks>
    340         /// e.g.:  
    341         ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
    342         /// </remarks>
    343         /// <param name="connectionString">一个有效的数据库连接字符串</param>
    344         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
    345         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
    346         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    347         /// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
    348         public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    349         {
    350             SqlCommand cmd = new SqlCommand();
    351 
    352             using (SqlConnection connection = new SqlConnection(connectionString))
    353             {
    354                 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
    355                 object val = cmd.ExecuteScalar();
    356                 cmd.Parameters.Clear();
    357                 return val;
    358             }
    359         }
    360 
    361         /// <summary>
    362         /// Execute a SqlCommand that returns the first column of the first record against an existing database connection 
    363         /// using the provided parameters.
    364         /// </summary>
    365         /// <remarks>
    366         /// e.g.:  
    367         ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
    368         /// </remarks>
    369         /// <param name="connectionString">一个有效的数据库连接字符串</param>
    370         /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
    371         /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
    372         /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
    373         /// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
    374         public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
    375         {
    376             SqlCommand cmd = new SqlCommand();
    377             PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
    378             object val = cmd.ExecuteScalar();
    379             cmd.Parameters.Clear();
    380             return val;
    381         }
    382 
    383         #endregion
    384 
    385 
    386         /// <summary>
    387         /// add parameter array to the cache
    388         /// </summary>
    389         /// <param name="cacheKey">Key to the parameter cache</param>
    390         /// <param name="cmdParms">an array of SqlParamters to be cached</param>
    391         public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)
    392         {
    393             parmCache[cacheKey] = commandParameters;
    394         }
    395 
    396         /// <summary>
    397         /// Retrieve cached parameters
    398         /// </summary>
    399         /// <param name="cacheKey">key used to lookup parameters</param>
    400         /// <returns>Cached SqlParamters array</returns>
    401         public static SqlParameter[] GetCachedParameters(string cacheKey)
    402         {
    403             SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];
    404             if (cachedParms == null)
    405                 return null;
    406             SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];
    407             for (int i = 0, j = cachedParms.Length; i < j; i++)
    408                 clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();
    409             return clonedParms;
    410         }
    411 
    412 
    413         /// <summary>
    414         /// 检查是否存在
    415         /// </summary>
    416         /// <param name="strSql">Sql语句</param>
    417         /// <returns>bool结果</returns>
    418         public static bool Exists(string strSql)
    419         {
    420             int cmdresult = Convert.ToInt32(ExecuteScalar(connectionString, CommandType.Text, strSql, null));
    421             if (cmdresult == 0)
    422             {
    423                 return false;
    424             }
    425             else
    426             {
    427                 return true;
    428             }
    429         }
    430 
    431         /// <summary>
    432         /// 检查是否存在
    433         /// </summary>
    434         /// <param name="strSql">Sql语句</param>
    435         /// <param name="cmdParms">参数</param>
    436         /// <returns>bool结果</returns>
    437         public static bool Exists(string strSql, params SqlParameter[] cmdParms)
    438         {
    439             int cmdresult = Convert.ToInt32(ExecuteScalar(connectionString, CommandType.Text, strSql, cmdParms));
    440             if (cmdresult == 0)
    441             {
    442                 return false;
    443             }
    444             else
    445             {
    446                 return true;
    447             }
    448         }
    449     }
    450 
    451 }
    452 
    453 
     
     
     
     
     
     
  • 相关阅读:
    java实验报告(实验五)
    java实验报告(实验三)
    java读书笔记二
    总结报告
    Android实践项目汇报(总结)-修改
    Android实践项目汇报(总结)
    Android实践项目汇报(四)
    Android实践项目汇报(三)
    Android实践项目汇报(二)
    Android实践项目汇报-改(一)
  • 原文地址:https://www.cnblogs.com/angleSJW/p/1654807.html
Copyright © 2020-2023  润新知