C#实现较为实用的SQLhelper
第一次写博客,想不到写什么好b( ̄▽ ̄)d ,考虑的半天决定从sqlhelper开始,sqlhelper对程序员来说就像helloworld一样,很简单却又很重要,helloworld代表着程序员萌新第一次写代码,而sqlhelper则是初次接触数据库(不知道这种说法对不对)。
好了不废话了,下面直接上代码(无话可说了):
public class SQLHelper
{
// 超时时间
private static int Timeout = ;
// 数据库名称
public const String BestNet = "BestNet";
//存储过程名称
public const String UserInfoCURD = "UserInfoCURD";
// 数据库连接字符串
private static Dictionary<String, String> ConnStrs = new Dictionary<String, String>(); /// <summary>
/// SQLServer操作类(静态构造函数)
/// </summary>
static SQLHelper()
{
ConnectionStringSettingsCollection configs = WebConfigurationManager.ConnectionStrings;
foreach (ConnectionStringSettings config in configs)
{
ConnStrs.Add(config.Name, config.ConnectionString);
}
} /// <summary>
/// 获取数据库连接
/// </summary>
/// <param name="database">数据库(配置文件内connectionStrings的name)</param>
/// <returns>数据库连接</returns>
private static SqlConnection GetConnection(string database)
{
if (string.IsNullOrEmpty(database))
{
throw new Exception("未设置参数:database");
}
if (!ConnStrs.ContainsKey(database))
{
throw new Exception("未找到数据库:" + database);
}
return new SqlConnection(ConnStrs[database]);
} /// <summary>
/// 获取SqlCommand
/// </summary>
/// <param name="conn">SqlConnection</param>
/// <param name="transaction">SqlTransaction</param>
/// <param name="cmdType">CommandType</param>
/// <param name="sql">SQL</param>
/// <param name="parms">SqlParameter数组</param>
/// <returns></returns>
private static SqlCommand GetCommand(SqlConnection conn, SqlTransaction transaction, CommandType cmdType, string sql, SqlParameter[] parms)
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.CommandType = cmdType;
cmd.CommandTimeout = Timeout;
if (transaction != null)
cmd.Transaction = transaction;
if (parms != null && parms.Length != )
cmd.Parameters.AddRange(parms);
return cmd;
} /// <summary>
/// 查询数据,返回DataTable
/// </summary>
/// <param name="database">数据库</param>
/// <param name="sql">SQL语句或存储过程名</param>
/// <param name="parms">参数</param>
/// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
/// <returns>DataTable</returns>
public static DataTable QueryDataTable(string database, string sql, SqlParameter[] parms, CommandType cmdType)
{
if (string.IsNullOrEmpty(database))
{
throw new Exception("未设置参数:database");
}
if (string.IsNullOrEmpty(sql))
{
throw new Exception("未设置参数:sql");
} try
{
using (SqlConnection conn = GetConnection(database))
{
conn.Open(); using (SqlCommand cmd = GetCommand(conn, null, cmdType, sql, parms))
{
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}
}
}
catch (SqlException ex)
{
System.Text.StringBuilder log = new System.Text.StringBuilder();
log.Append("查询数据出错:");
log.Append(ex);
throw new Exception(log.ToString());
}
} /// <summary>
/// 查询数据,返回DataSet
/// </summary>
/// <param name="database">数据库</param>
/// <param name="sql">SQL语句或存储过程名</param>
/// <param name="parms">参数</param>
/// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
/// <returns>DataSet</returns>
public static DataSet QueryDataSet(string database, string sql, SqlParameter[] parms, CommandType cmdType)
{
if (string.IsNullOrEmpty(database))
{
throw new Exception("未设置参数:database");
}
if (string.IsNullOrEmpty(sql))
{
throw new Exception("未设置参数:sql");
} try
{
using (SqlConnection conn = GetConnection(database))
{
conn.Open(); using (SqlCommand cmd = GetCommand(conn, null, cmdType, sql, parms))
{
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
}
}
catch (SqlException ex)
{
System.Text.StringBuilder log = new System.Text.StringBuilder();
log.Append("查询数据出错:");
log.Append(ex);
throw new Exception(log.ToString());
}
} /// <summary>
/// 执行命令获取唯一值(第一行第一列)
/// </summary>
/// <param name="database">数据库</param>
/// <param name="sql">SQL语句或存储过程名</param>
/// <param name="parms">参数</param>
/// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
/// <returns>获取值</returns>
public static object QueryScalar(string database, string sql, SqlParameter[] parms, CommandType cmdType)
{
if (string.IsNullOrEmpty(database))
{
throw new Exception("未设置参数:database");
}
if (string.IsNullOrEmpty(sql))
{
throw new Exception("未设置参数:sql");
}
try
{
using (SqlConnection conn = GetConnection(database))
{
conn.Open(); using (SqlCommand cmd = GetCommand(conn, null, cmdType, sql, parms))
{
return cmd.ExecuteScalar();
}
}
}
catch (SqlException ex)
{
System.Text.StringBuilder log = new System.Text.StringBuilder();
log.Append("处理出错:");
log.Append(ex);
throw new Exception(log.ToString());
}
} /// <summary>
/// 执行命令更新数据
/// </summary>
/// <param name="database">数据库</param>
/// <param name="sql">SQL语句或存储过程名</param>
/// <param name="parms">参数</param>
/// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
/// <returns>更新的行数</returns>
public static int Execute(string database, string sql, SqlParameter[] parms, CommandType cmdType)
{
if (string.IsNullOrEmpty(database))
{
throw new Exception("未设置参数:database");
}
if (string.IsNullOrEmpty(sql))
{
throw new Exception("未设置参数:sql");
} //返回(增删改)的更新行数
int count = ; try
{
using (SqlConnection conn = GetConnection(database))
{
conn.Open(); using (SqlCommand cmd = GetCommand(conn, null, cmdType, sql, parms))
{
if (cmdType == CommandType.StoredProcedure)
cmd.Parameters.AddWithValue("@RETURN_VALUE", "").Direction = ParameterDirection.ReturnValue; count = cmd.ExecuteNonQuery(); if (count <= )
if (cmdType == CommandType.StoredProcedure)
count = (int)cmd.Parameters["@RETURN_VALUE"].Value;
}
}
}
catch (SqlException ex)
{
System.Text.StringBuilder log = new System.Text.StringBuilder();
log.Append("处理出错:");
log.Append(ex);
throw new Exception(log.ToString());
}
return count;
} /// <summary>
/// 查询数据,返回DataTable
/// </summary>
/// <param name="database">数据库</param>
/// <param name="sql">SQL语句或存储过程名</param>
/// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
/// <param name="values">参数</param>
/// <returns>DataTable</returns>
public static DataTable QueryDataTable(string database, string sql, CommandType cmdType, IDictionary<string, object> values)
{
SqlParameter[] parms = DicToParams(values);
return QueryDataTable(database, sql, parms, cmdType);
} /// <summary>
/// 执行存储过程查询数据,返回DataSet
/// </summary>
/// <param name="database">数据库</param>
/// <param name="sql">SQL语句或存储过程名</param>
/// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
/// <param name="values">参数
/// <returns>DataSet</returns>
public static DataSet QueryDataSet(string database, string sql, CommandType cmdType, IDictionary<string, object> values)
{
SqlParameter[] parms = DicToParams(values);
return QueryDataSet(database, sql, parms, cmdType);
} /// <summary>
/// 执行命令获取唯一值(第一行第一列)
/// </summary>
/// <param name="database">数据库</param>
/// <param name="sql">SQL语句或存储过程名</param>
/// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
/// <param name="values">参数</param>
/// <returns>唯一值</returns>
public static object QueryScalar(string database, string sql, CommandType cmdType, IDictionary<string, object> values)
{
SqlParameter[] parms = DicToParams(values);
return QueryScalar(database, sql, parms, cmdType);
} /// <summary>
/// 执行命令更新数据
/// </summary>
/// <param name="database">数据库</param>
/// <param name="sql">SQL语句或存储过程名</param>
/// <param name="cmdType">查询类型(SQL语句/存储过程名)</param>
/// <param name="values">参数</param>
/// <returns>更新的行数</returns>
public static int Execute(string database, string sql, CommandType cmdType, IDictionary<string, object> values)
{
SqlParameter[] parms = DicToParams(values);
return Execute(database, sql, parms, cmdType);
} /// <summary>
/// 创建参数
/// </summary>
/// <param name="name">参数名</param>
/// <param name="type">参数类型</param>
/// <param name="size">参数大小</param>
/// <param name="direction">参数方向(输入/输出)</param>
/// <param name="value">参数值</param>
/// <returns>新参数对象</returns>
public static SqlParameter[] DicToParams(IDictionary<string, object> values)
{
if (values == null) return null; SqlParameter[] parms = new SqlParameter[values.Count];
int index = ;
foreach (KeyValuePair<string, object> kv in values)
{
SqlParameter parm = null;
if (kv.Value == null)
{
parm = new SqlParameter(kv.Key, DBNull.Value);
}
else
{
Type t = kv.Value.GetType();
parm = new SqlParameter(kv.Key, NetToSql(kv.Value.GetType()));
parm.Value = kv.Value;
} parms[index++] = parm;
}
return parms;
} /// <summary>
/// .net类型转换为Sql类型
/// </summary>
/// <param name="t">.net类型</param>
/// <returns>Sql类型</returns>
public static SqlDbType NetToSql(Type t)
{
SqlDbType dbType = SqlDbType.Variant;
switch (t.Name)
{
case "Int16":
dbType = SqlDbType.SmallInt;
break;
case "Int32":
dbType = SqlDbType.Int;
break;
case "Int64":
dbType = SqlDbType.BigInt;
break;
case "Single":
dbType = SqlDbType.Real;
break;
case "Decimal":
dbType = SqlDbType.Decimal;
break; case "Byte[]":
dbType = SqlDbType.VarBinary;
break;
case "Boolean":
dbType = SqlDbType.Bit;
break;
case "String":
dbType = SqlDbType.NVarChar;
break;
case "Char[]":
dbType = SqlDbType.Char;
break;
case "DateTime":
dbType = SqlDbType.DateTime;
break;
case "DateTime2":
dbType = SqlDbType.DateTime2;
break;
case "DateTimeOffset":
dbType = SqlDbType.DateTimeOffset;
break;
case "TimeSpan":
dbType = SqlDbType.Time;
break;
case "Guid":
dbType = SqlDbType.UniqueIdentifier;
break;
case "Xml":
dbType = SqlDbType.Xml;
break;
case "Object":
dbType = SqlDbType.Variant;
break;
}
return dbType;
} }
可以直接这样调用:
IDictionary<string, object> values = new Dictionary<string, object>();
values.Add("@UserName", UserName);
values.Add("@PassWord", passWord);
object Scalar = SQLHelper.QueryScalar(SQLHelper.BestNet, SQLHelper.UserInfoCURD, CommandType.StoredProcedure, values);
C#实现较为实用的SQLhelper的更多相关文章
- 整理出一个比较实用的SqlHelper类 满足大多数情况的使用
/// <summary> /// SqlHelper类 by zy 2016-3-11 /// </summary> public sealed class SqlHelpe ...
- 【转载】实用VC++6.0插件
[转自]http://www.cnblogs.com/witxjp/archive/2011/04/03/2004556.html Visual Assist(强烈推荐)网址:http://www.w ...
- jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
今天学习jQuery,看到nth-child(even)用法,特意找了下这个选择器的用法,在CSS3标准中,用法很强大. 对此,我把CSS3标准中nth-child()用法大致介绍下: CSS3伪类选 ...
- 软件工程(FZU2015)赛季得分榜,第11回合(beta冲刺+SE总结)
目录 第一回合 第二回合 第三回合 第四回合 第五回合 第6回合 第7回合 第8回合 第9回合 第10回合 第11回合 增补作业 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分:b ...
- c# unity PlayerPrefs 游戏存档,直白点就是讲游戏数据本地保存下来
在游戏会话中储存和访问游戏存档.这个是持久化数据储存,比如保存游戏记录. 我的理解是通过某个特殊的标签来保存在本地,而且该标签为key的意思,初始值不用赋值. 在游戏开发中较为实用. 暂时用到了 Se ...
- background-size拉伸背景图片
在制作页面中常需要对背景图片在容器中进行平铺,可用background-size属性对背景编辑:拉伸,压缩等~ background-size:contain; 将背景扩展到整个容器大小. 较为实用的 ...
- fir.im Weekly - 如何做一个出色的程序员
做一个出色的程序员,困难而高尚.本期 fir.im Weekly 精选了一些实用的 iOS,Android 开发工具和源码分享,还有一些关于程序员的成长 Tips 和有意思有质量的线下活动~ How ...
- html和js基础功能代码备份
1)贴图:<img src="图片地址">2)加入连接:<a href="所要连接的相关地址">写上你想写的字</a> 3) ...
- Python 代码优化常见技巧
代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 80% 的工作量.优化通常包含两方 ...
随机推荐
- CSS3 (二)
translate() 方法 通过 translate() 方法,元素从其当前位置移动,根据给定的 left(x 坐标) 和 top(y 坐标) 位置参数: 示例: div { transform: ...
- 轮廓线DP:poj 2279 Mr. Young's Picture Permutations
poj 2279 Mr. Young's Picture Permutations \(solution:\) 首先摘取一些关键词:(每行不超过它后面的行)(每排学生安排高度从左到右减少)(学生的高度 ...
- kbmMemTable关于内存表的使用,以及各种三层框架的评价
关于内存表的使用(kbmMemTable) 关于内存表的使用说明一. Delphi使用内存表1.1 Delphi创建内存表步骤:1. 创建一个Ttable实例.2. 设置一个DataBaseName为 ...
- Delphi ActiveForm发布全攻略
论坛上很多朋友(也包括我)提到ActiveForm的发布问题,都没有得到很好的解决.下面是本人开发ActiveForm的一点经验,拿出来跟大家分享,开发环境为 Win2000Server,IIS5.0 ...
- bzoj3137: [Baltic2013]tracks
炸一看好像很神仙的样子,其实就是个sb题 万年不见的1A 但是我们可以反过来想,先选一个起点到终点的联通块,然后这联通块后面相当于就能够走了,继续找联通块 然后就能发现直接相邻的脚步相同的边权为0,否 ...
- BestCoder5 1001 Poor Hanamichi(hdu 4956) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4956(它放在题库后面的格式有一点点问题啦,所以就把它粘下来,方便读者观看) 题目意思:给出一个范围 [ ...
- PHP Framework MVC Benchmark 基准测试
身边有朋友在用yaf框架,讨论的也声音也比较多,今天没事看鸟哥的博客,看到一篇现在PHP主流的几个框架性能对比,比较有意思,给大家分享一下! Yaf是用PHP扩展的形式写的一个PHP框架,也就是以C语 ...
- 【POJ 2478】 Farey Sequence
[题目链接] 点击打开链接 [算法] 不难看出,ans = phi(2) + phi(3) + .... + phi(n-1) + phi(n) 线性筛筛出欧拉函数,预处理前缀和,即可 [代码] #i ...
- maven 简单入门教学实战手册
Maven那点事儿(Eclipse版) 前言: 由于最近工作学习,总是能碰到Maven的源码.虽然平时工作并不使用Maven,但是为了学习一些源码,还是必须要了解下.这篇文章不是一个全面的Mave ...
- [转]Python+Selenium之expected_conditions:各种判断(上)
原文地址: https://www.jianshu.com/p/f3189f1951cc 其他类似文章: https://www.cnblogs.com/yuuwee/p/6635652.html h ...