zoukankan      html  css  js  c++  java
  • C#实现较为实用的SQLhelper

      第一次写博客,想不到写什么好b( ̄▽ ̄)d ,考虑的半天决定从sqlhelper开始,sqlhelper对程序员来说就像helloworld一样,很简单却又很重要,helloworld代表着程序员萌新第一次写代码,而sqlhelper则是初次接触数据库(不知道这种说法对不对)。

      好了不废话了,下面直接上代码(无话可说了):

      1     public class SQLHelper
      2     {
      3         // 超时时间
      4         private static int Timeout = 1000;
      5         // 数据库名称
      6         public const String BestNet = "BestNet";
      7         //存储过程名称
      8         public const String UserInfoCURD = "UserInfoCURD";
      9         // 数据库连接字符串
     10         private static Dictionary<String, String> ConnStrs = new Dictionary<String, String>();
     11 
     12         /// <summary>
     13         /// SQLServer操作类(静态构造函数)
     14         /// </summary>
     15         static SQLHelper()
     16         {
     17             ConnectionStringSettingsCollection configs = WebConfigurationManager.ConnectionStrings;
     18             foreach (ConnectionStringSettings config in configs)
     19             {
     20                 ConnStrs.Add(config.Name, config.ConnectionString);
     21             }
     22         }
     23 
     24         /// <summary>
     25         /// 获取数据库连接
     26         /// </summary>
     27         /// <param name="database">数据库(配置文件内connectionStrings的name)</param>
     28         /// <returns>数据库连接</returns>
     29         private static SqlConnection GetConnection(string database)
     30         {
     31             if (string.IsNullOrEmpty(database))
     32             {
     33                 throw new Exception("未设置参数:database");
     34             }
     35             if (!ConnStrs.ContainsKey(database))
     36             {
     37                 throw new Exception("未找到数据库:" + database);
     38             }
     39             return new SqlConnection(ConnStrs[database]);
     40         }
     41 
     42         /// <summary>
     43         /// 获取SqlCommand
     44         /// </summary>
     45         /// <param name="conn">SqlConnection</param>
     46         /// <param name="transaction">SqlTransaction</param>
     47         /// <param name="cmdType">CommandType</param>
     48         /// <param name="sql">SQL</param>
     49         /// <param name="parms">SqlParameter数组</param>
     50         /// <returns></returns>
     51         private static SqlCommand GetCommand(SqlConnection conn, SqlTransaction transaction, CommandType cmdType, string sql, SqlParameter[] parms)
     52         {
     53             SqlCommand cmd = new SqlCommand(sql, conn);
     54             cmd.CommandType = cmdType;
     55             cmd.CommandTimeout = Timeout;
     56             if (transaction != null)
     57                 cmd.Transaction = transaction;
     58             if (parms != null && parms.Length != 0)
     59                 cmd.Parameters.AddRange(parms);
     60             return cmd;
     61         }
     62 
     63         /// <summary>
     64         /// 查询数据,返回DataTable
     65         /// </summary>
     66         /// <param name="database">数据库</param>
     67         /// <param name="sql">SQL语句或存储过程名</param>
     68         /// <param name="parms">参数</param>
     69         /// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
     70         /// <returns>DataTable</returns>
     71         public static DataTable QueryDataTable(string database, string sql, SqlParameter[] parms, CommandType cmdType)
     72         {
     73             if (string.IsNullOrEmpty(database))
     74             {
     75                 throw new Exception("未设置参数:database");
     76             }
     77             if (string.IsNullOrEmpty(sql))
     78             {
     79                 throw new Exception("未设置参数:sql");
     80             }
     81 
     82             try
     83             {
     84                 using (SqlConnection conn = GetConnection(database))
     85                 {
     86                     conn.Open();
     87 
     88                     using (SqlCommand cmd = GetCommand(conn, null, cmdType, sql, parms))
     89                     {
     90                         using (SqlDataAdapter da = new SqlDataAdapter(cmd))
     91                         {
     92                             DataTable dt = new DataTable();
     93                             da.Fill(dt);
     94                             return dt;
     95                         }
     96                     }
     97                 }
     98             }
     99             catch (SqlException ex)
    100             {
    101                 System.Text.StringBuilder log = new System.Text.StringBuilder();
    102                 log.Append("查询数据出错:");
    103                 log.Append(ex);
    104                 throw new Exception(log.ToString());
    105             }
    106         }
    107 
    108         /// <summary>
    109         /// 查询数据,返回DataSet
    110         /// </summary>
    111         /// <param name="database">数据库</param>
    112         /// <param name="sql">SQL语句或存储过程名</param>
    113         /// <param name="parms">参数</param>
    114         /// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
    115         /// <returns>DataSet</returns>
    116         public static DataSet QueryDataSet(string database, string sql, SqlParameter[] parms, CommandType cmdType)
    117         {
    118             if (string.IsNullOrEmpty(database))
    119             {
    120                 throw new Exception("未设置参数:database");
    121             }
    122             if (string.IsNullOrEmpty(sql))
    123             {
    124                 throw new Exception("未设置参数:sql");
    125             }
    126 
    127             try
    128             {
    129                 using (SqlConnection conn = GetConnection(database))
    130                 {
    131                     conn.Open();
    132 
    133                     using (SqlCommand cmd = GetCommand(conn, null, cmdType, sql, parms))
    134                     {
    135                         using (SqlDataAdapter da = new SqlDataAdapter(cmd))
    136                         {
    137                             DataSet ds = new DataSet();
    138                             da.Fill(ds);
    139                             return ds;
    140                         }
    141                     }
    142                 }
    143             }
    144             catch (SqlException ex)
    145             {
    146                 System.Text.StringBuilder log = new System.Text.StringBuilder();
    147                 log.Append("查询数据出错:");
    148                 log.Append(ex);
    149                 throw new Exception(log.ToString());
    150             }
    151         }
    152 
    153         /// <summary>
    154         /// 执行命令获取唯一值(第一行第一列)
    155         /// </summary>
    156         /// <param name="database">数据库</param>
    157         /// <param name="sql">SQL语句或存储过程名</param>
    158         /// <param name="parms">参数</param>
    159         /// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
    160         /// <returns>获取值</returns>
    161         public static object QueryScalar(string database, string sql, SqlParameter[] parms, CommandType cmdType)
    162         {
    163             if (string.IsNullOrEmpty(database))
    164             {
    165                 throw new Exception("未设置参数:database");
    166             }
    167             if (string.IsNullOrEmpty(sql))
    168             {
    169                 throw new Exception("未设置参数:sql");
    170             }
    171             try
    172             {
    173                 using (SqlConnection conn = GetConnection(database))
    174                 {
    175                     conn.Open();
    176 
    177                     using (SqlCommand cmd = GetCommand(conn, null, cmdType, sql, parms))
    178                     {
    179                         return cmd.ExecuteScalar();
    180                     }
    181                 }
    182             }
    183             catch (SqlException ex)
    184             {
    185                 System.Text.StringBuilder log = new System.Text.StringBuilder();
    186                 log.Append("处理出错:");
    187                 log.Append(ex);
    188                 throw new Exception(log.ToString());
    189             }
    190         }
    191 
    192         /// <summary>
    193         /// 执行命令更新数据
    194         /// </summary>
    195         /// <param name="database">数据库</param>
    196         /// <param name="sql">SQL语句或存储过程名</param>
    197         /// <param name="parms">参数</param>
    198         /// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
    199         /// <returns>更新的行数</returns>
    200         public static int Execute(string database, string sql, SqlParameter[] parms, CommandType cmdType)
    201         {
    202             if (string.IsNullOrEmpty(database))
    203             {
    204                 throw new Exception("未设置参数:database");
    205             }
    206             if (string.IsNullOrEmpty(sql))
    207             {
    208                 throw new Exception("未设置参数:sql");
    209             }
    210 
    211             //返回(增删改)的更新行数
    212             int count = 0;
    213 
    214             try
    215             {
    216                 using (SqlConnection conn = GetConnection(database))
    217                 {
    218                     conn.Open();
    219 
    220                     using (SqlCommand cmd = GetCommand(conn, null, cmdType, sql, parms))
    221                     {
    222                         if (cmdType == CommandType.StoredProcedure)
    223                             cmd.Parameters.AddWithValue("@RETURN_VALUE", "").Direction = ParameterDirection.ReturnValue;
    224 
    225                         count = cmd.ExecuteNonQuery();
    226 
    227                         if (count <= 0)
    228                             if (cmdType == CommandType.StoredProcedure)
    229                                 count = (int)cmd.Parameters["@RETURN_VALUE"].Value;
    230                     }
    231                 }
    232             }
    233             catch (SqlException ex)
    234             {
    235                 System.Text.StringBuilder log = new System.Text.StringBuilder();
    236                 log.Append("处理出错:");
    237                 log.Append(ex);
    238                 throw new Exception(log.ToString());
    239             }
    240             return count;
    241         }
    242 
    243         /// <summary>
    244         /// 查询数据,返回DataTable
    245         /// </summary>
    246         /// <param name="database">数据库</param>
    247         /// <param name="sql">SQL语句或存储过程名</param>
    248         /// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
    249         /// <param name="values">参数</param>
    250         /// <returns>DataTable</returns>
    251         public static DataTable QueryDataTable(string database, string sql, CommandType cmdType, IDictionary<string, object> values)
    252         {
    253             SqlParameter[] parms = DicToParams(values);
    254             return QueryDataTable(database, sql, parms, cmdType);
    255         }
    256 
    257         /// <summary>
    258         /// 执行存储过程查询数据,返回DataSet
    259         /// </summary>
    260         /// <param name="database">数据库</param>
    261         /// <param name="sql">SQL语句或存储过程名</param>
    262         /// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
    263         /// <param name="values">参数
    264         /// <returns>DataSet</returns>
    265         public static DataSet QueryDataSet(string database, string sql, CommandType cmdType, IDictionary<string, object> values)
    266         {
    267             SqlParameter[] parms = DicToParams(values);
    268             return QueryDataSet(database, sql, parms, cmdType);
    269         }
    270 
    271         /// <summary>
    272         /// 执行命令获取唯一值(第一行第一列)
    273         /// </summary>
    274         /// <param name="database">数据库</param>
    275         /// <param name="sql">SQL语句或存储过程名</param>
    276         /// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
    277         /// <param name="values">参数</param>
    278         /// <returns>唯一值</returns>
    279         public static object QueryScalar(string database, string sql, CommandType cmdType, IDictionary<string, object> values)
    280         {
    281             SqlParameter[] parms = DicToParams(values);
    282             return QueryScalar(database, sql, parms, cmdType);
    283         }
    284 
    285         /// <summary>
    286         /// 执行命令更新数据
    287         /// </summary>
    288         /// <param name="database">数据库</param>
    289         /// <param name="sql">SQL语句或存储过程名</param>
    290         /// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
    291         /// <param name="values">参数</param>
    292         /// <returns>更新的行数</returns>
    293         public static int Execute(string database, string sql, CommandType cmdType, IDictionary<string, object> values)
    294         {
    295             SqlParameter[] parms = DicToParams(values);
    296             return Execute(database, sql, parms, cmdType);
    297         }
    298 
    299         /// <summary>
    300         /// 创建参数
    301         /// </summary>
    302         /// <param name="name">参数名</param>
    303         /// <param name="type">参数类型</param>
    304         /// <param name="size">参数大小</param>
    305         /// <param name="direction">参数方向(输入/输出)</param>
    306         /// <param name="value">参数值</param>
    307         /// <returns>新参数对象</returns>
    308         public static SqlParameter[] DicToParams(IDictionary<string, object> values)
    309         {
    310             if (values == null) return null;
    311 
    312             SqlParameter[] parms = new SqlParameter[values.Count];
    313             int index = 0;
    314             foreach (KeyValuePair<string, object> kv in values)
    315             {
    316                 SqlParameter parm = null;
    317                 if (kv.Value == null)
    318                 {
    319                     parm = new SqlParameter(kv.Key, DBNull.Value);
    320                 }
    321                 else
    322                 {
    323                     Type t = kv.Value.GetType();
    324                     parm = new SqlParameter(kv.Key, NetToSql(kv.Value.GetType()));
    325                     parm.Value = kv.Value;
    326                 }
    327 
    328                 parms[index++] = parm;
    329             }
    330             return parms;
    331         }
    332 
    333 
    334         /// <summary>
    335         /// .net类型转换为Sql类型
    336         /// </summary>
    337         /// <param name="t">.net类型</param>
    338         /// <returns>Sql类型</returns>
    339         public static SqlDbType NetToSql(Type t)
    340         {
    341             SqlDbType dbType = SqlDbType.Variant;
    342             switch (t.Name)
    343             {
    344                 case "Int16":
    345                     dbType = SqlDbType.SmallInt;
    346                     break;
    347                 case "Int32":
    348                     dbType = SqlDbType.Int;
    349                     break;
    350                 case "Int64":
    351                     dbType = SqlDbType.BigInt;
    352                     break;
    353                 case "Single":
    354                     dbType = SqlDbType.Real;
    355                     break;
    356                 case "Decimal":
    357                     dbType = SqlDbType.Decimal;
    358                     break;
    359 
    360                 case "Byte[]":
    361                     dbType = SqlDbType.VarBinary;
    362                     break;
    363                 case "Boolean":
    364                     dbType = SqlDbType.Bit;
    365                     break;
    366                 case "String":
    367                     dbType = SqlDbType.NVarChar;
    368                     break;
    369                 case "Char[]":
    370                     dbType = SqlDbType.Char;
    371                     break;
    372                 case "DateTime":
    373                     dbType = SqlDbType.DateTime;
    374                     break;
    375                 case "DateTime2":
    376                     dbType = SqlDbType.DateTime2;
    377                     break;
    378                 case "DateTimeOffset":
    379                     dbType = SqlDbType.DateTimeOffset;
    380                     break;
    381                 case "TimeSpan":
    382                     dbType = SqlDbType.Time;
    383                     break;
    384                 case "Guid":
    385                     dbType = SqlDbType.UniqueIdentifier;
    386                     break;
    387                 case "Xml":
    388                     dbType = SqlDbType.Xml;
    389                     break;
    390                 case "Object":
    391                     dbType = SqlDbType.Variant;
    392                     break;
    393             }
    394             return dbType;
    395         }
    396 
    397     }

      可以直接这样调用:

    1 IDictionary<string, object> values = new Dictionary<string, object>();
    2 values.Add("@UserName", UserName);            
    3 values.Add("@PassWord", passWord);
    4 object Scalar = SQLHelper.QueryScalar(SQLHelper.BestNet, SQLHelper.UserInfoCURD, CommandType.StoredProcedure, values);    
  • 相关阅读:
    移动Web应用开发入门指南——视觉篇
    Dapper的完整扩展(转)
    Dapper.net 在Parameterized时对于String的扩展(转)
    Entity Framework 5.0
    用事实说话,成熟的ORM性能不是瓶颈,灵活性不是问题:EF5.0、PDF.NET5.0、Dapper原理分析与测试手记(转)
    雅虎团队:网站性能优化的35条黄金守则(转)
    在window server 2008 64位系统上 发布网站的过程中遇到的问题(转)
    sqlserver能否调用webservice发送短信呢?
    数据库优化方案(转)
    SQL点滴之编辑数据(转)
  • 原文地址:https://www.cnblogs.com/bestckk/p/5932746.html
Copyright © 2011-2022 走看看