第一次写博客,想不到写什么好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);    

转载于:https://www.cnblogs.com/bestckk/p/5932746.html

C#实现较为实用的SQLhelper相关推荐

  1. 副业赚钱的路子有哪些?分享6种较为实用的副业方式

    如今社会的压力越来越大,很多人都开始积极寻找副业赚钱的途径,以缓解生活中的经济压力.副业赚钱的方式多种多样,可以依据个人的兴趣爱好.特长技能来选择.以下分享6种较为实用的副业赚钱方式. 1.跑腿服务 ...

  2. 整理出一个比较实用的SqlHelper类 满足大多数情况的使用

    /// <summary>/// SqlHelper类 by zy 2016-3-11/// </summary>public sealed class SqlHelper{/ ...

  3. 实用的SqlHelper类

    代码   1 using System;   2 using System.Collections.Generic;   3 using System.Text;   4 using System.D ...

  4. 三维重建【二】————3D reconstruction 较为实用的算法资料整理(传统方式)

    本文结合一些pape并且将资源进行整合,以便于后期的学习.博客将这些资源一下,这里不得提到大名鼎鼎的KinectFusion以及他后面的一系列工作.KinectFusion单篇论文引用都已经超过300 ...

  5. mapgis明码文件转为点线面文件_干货|MAPGIS的二十一个实用方法及技巧

    一.如何将mapgis的图形插到word.excel.PowerPoint 中 首先点取mapgis菜单"其他->OLE拷贝",接着打开word,点取"粘贴&quo ...

  6. 最实用 DC终极扫盲大辞典! --- 让你对DC完全了解的88条名词解释(一)

    1.ae锁 ae是automatic exposure自动曝光控制装置的缩写,ae锁就是锁定于某一ae设置,用于自动曝光时人为控制曝光量,保证主体曝光正常. 使用ae锁有几点需要注意:1.手动方式或自 ...

  7. 日语输入法时的部分实用快捷键

    "Alt+Shift" 用于切换中文.英文.日文输入法(当然如果你的PC装有别的语言输入法,可以接着换下去) 日语输入法时:   "Ctrl+Caps" 切换成 ...

  8. 五招教你做好企业年终绩效考核,太实用了!

    五招教你做好企业年终绩效考核,太实用了! 年底到了,各个公司的人力部门都开始着手年终绩效考核的工作了!很多人力资源的新手都不知道如何做年底绩效的考核工作,今天咱们来分享一下,年终绩效考核工作应该怎么做 ...

  9. Photoshop(P图)实用技巧介绍

    绿色版Adobe Photoshop CC下载:https://pan.baidu.com/s/1M1Srt9JQGlxaPyGhP0JRUw photoshop首先在于学习各种小工具的用途,然后学习 ...

最新文章

  1. 华为交换机SSH和telnet登录配置
  2. [排错]运行cocos2d自带的cocos2d-test-ios工程出现错误:找不到libcocos2d.a
  3. 甘肃甘南步班邮递员:草原上的“递爱”艰途
  4. C#判断某软件是否安装
  5. 【qduoj】奇数阶幻方 (构造)
  6. c# 再次尝试 连接失败_[图]连接USB或者SD卡的PC将阻止升级Windows 10 May 2019功能更新...
  7. SPFA ----模板 O(kE) (k一般不超过2)
  8. java导入jar包源码_eclipse中导入jar包的源码
  9. DispatchAction和MappingDispatchAction区别
  10. c# 正则表达式对网页进行有效内容抽取
  11. python模拟别人说话的声音传得最远_谁说话的声音传得最远脑筋急转弯的答案是什么...
  12. Ubuntu常用命令大全
  13. HBase(二)——下载 HBase
  14. 三种新姿势帮你写出精美简历
  15. C#_HelloWorld 篇
  16. 【自然语言处理】词性标注
  17. 06 第三方之短信封装
  18. 国际化的locale类详解
  19. BZOJ4622 [NOI 2003] 智破连环阵
  20. 英语专业,不想做老师,还能做什么工作?

热门文章

  1. PHP面向对象的魔术方法
  2. WordPress post和page的区别
  3. python搜索引擎和爬虫框架介绍
  4. 格式化显示(日期\货币)
  5. [股市]跳搂指数(收藏)
  6. win10共享打印错误0x0000006_Win7打印机无法共享提示错误代码0x000006d9的解决方法...
  7. hbuilderx内置服务器启动失败_我们来看看Swoole是如何实现WebSocket服务器及客户端的...
  8. (87)FPGA读文件激励(readmemb)
  9. AD7606实际采样率输出数据量偏小
  10. FPGA设计经验总结