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);
转载于:https://www.cnblogs.com/bestckk/p/5932746.html
C#实现较为实用的SQLhelper相关推荐
- 副业赚钱的路子有哪些?分享6种较为实用的副业方式
如今社会的压力越来越大,很多人都开始积极寻找副业赚钱的途径,以缓解生活中的经济压力.副业赚钱的方式多种多样,可以依据个人的兴趣爱好.特长技能来选择.以下分享6种较为实用的副业赚钱方式. 1.跑腿服务 ...
- 整理出一个比较实用的SqlHelper类 满足大多数情况的使用
/// <summary>/// SqlHelper类 by zy 2016-3-11/// </summary>public sealed class SqlHelper{/ ...
- 实用的SqlHelper类
代码 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.D ...
- 三维重建【二】————3D reconstruction 较为实用的算法资料整理(传统方式)
本文结合一些pape并且将资源进行整合,以便于后期的学习.博客将这些资源一下,这里不得提到大名鼎鼎的KinectFusion以及他后面的一系列工作.KinectFusion单篇论文引用都已经超过300 ...
- mapgis明码文件转为点线面文件_干货|MAPGIS的二十一个实用方法及技巧
一.如何将mapgis的图形插到word.excel.PowerPoint 中 首先点取mapgis菜单"其他->OLE拷贝",接着打开word,点取"粘贴&quo ...
- 最实用 DC终极扫盲大辞典! --- 让你对DC完全了解的88条名词解释(一)
1.ae锁 ae是automatic exposure自动曝光控制装置的缩写,ae锁就是锁定于某一ae设置,用于自动曝光时人为控制曝光量,保证主体曝光正常. 使用ae锁有几点需要注意:1.手动方式或自 ...
- 日语输入法时的部分实用快捷键
"Alt+Shift" 用于切换中文.英文.日文输入法(当然如果你的PC装有别的语言输入法,可以接着换下去) 日语输入法时: "Ctrl+Caps" 切换成 ...
- 五招教你做好企业年终绩效考核,太实用了!
五招教你做好企业年终绩效考核,太实用了! 年底到了,各个公司的人力部门都开始着手年终绩效考核的工作了!很多人力资源的新手都不知道如何做年底绩效的考核工作,今天咱们来分享一下,年终绩效考核工作应该怎么做 ...
- Photoshop(P图)实用技巧介绍
绿色版Adobe Photoshop CC下载:https://pan.baidu.com/s/1M1Srt9JQGlxaPyGhP0JRUw photoshop首先在于学习各种小工具的用途,然后学习 ...
最新文章
- 华为交换机SSH和telnet登录配置
- [排错]运行cocos2d自带的cocos2d-test-ios工程出现错误:找不到libcocos2d.a
- 甘肃甘南步班邮递员:草原上的“递爱”艰途
- C#判断某软件是否安装
- 【qduoj】奇数阶幻方 (构造)
- c# 再次尝试 连接失败_[图]连接USB或者SD卡的PC将阻止升级Windows 10 May 2019功能更新...
- SPFA ----模板 O(kE) (k一般不超过2)
- java导入jar包源码_eclipse中导入jar包的源码
- DispatchAction和MappingDispatchAction区别
- c# 正则表达式对网页进行有效内容抽取
- python模拟别人说话的声音传得最远_谁说话的声音传得最远脑筋急转弯的答案是什么...
- Ubuntu常用命令大全
- HBase(二)——下载 HBase
- 三种新姿势帮你写出精美简历
- C#_HelloWorld 篇
- 【自然语言处理】词性标注
- 06 第三方之短信封装
- 国际化的locale类详解
- BZOJ4622 [NOI 2003] 智破连环阵
- 英语专业,不想做老师,还能做什么工作?
热门文章
- PHP面向对象的魔术方法
- WordPress post和page的区别
- python搜索引擎和爬虫框架介绍
- 格式化显示(日期\货币)
- [股市]跳搂指数(收藏)
- win10共享打印错误0x0000006_Win7打印机无法共享提示错误代码0x000006d9的解决方法...
- hbuilderx内置服务器启动失败_我们来看看Swoole是如何实现WebSocket服务器及客户端的...
- (87)FPGA读文件激励(readmemb)
- AD7606实际采样率输出数据量偏小
- FPGA设计经验总结