支持多返回值存储过程的SqlHelper
public readonly string connStr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
/// <summary>
/// 执行非插叙语句,返回受影响行数
/// </summary>
/// <param name="cmdText">Sql语句</param>
/// <param name="ps">参数列表</param>
/// <returns>受影响行数</returns>
public int ExecuteNonQuery(string cmdText, params SqlParameter[] ps)
{
return this.ExecuteNonQuery(cmdText, CommandType.Text, ps);
}
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="cmdText">存储过程名称</param>
/// <param name="ps">参数列表</param>
/// <returns>返回存储过程成功与否</returns>
public int ExecuteNonQuerySP(string cmdText, params SqlParameter[] ps)
{
return this.ExecuteNonQuery(cmdText, CommandType.StoredProcedure, ps);
}
/// <summary>
/// 执行SQL语句或存储过程,返回结果
/// </summary>
/// <param name="cmdText">SQL语句或存储过程名称</param>
/// <param name="type">执行类型</param>
/// <param name="ps">参数列表</param>
/// <returns>返回受影响行数或存储过程成功与否</returns>
public int ExecuteNonQuery(string cmdText, CommandType type, params SqlParameter[] ps)
{
if (type == CommandType.Text)
{
try
{
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand(cmdText, conn))
{
if (ps != null)
{
cmd.Parameters.AddRange(ps);
}
conn.Open();
return cmd.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
throw ex;
}
}
else if (type == CommandType.StoredProcedure)
{
try
{
ps[ps.Length - ].Direction = ParameterDirection.Output;
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand(cmdText, conn))
{
cmd.CommandType = CommandType.StoredProcedure;
if (ps != null)
{
cmd.Parameters.AddRange(ps);
}
conn.Open();
cmd.ExecuteNonQuery();
}
}
return (int)ps[ps.Length - ].Value;
}
catch (Exception ex)
{
throw ex;
}
}
else
{
return -;
}
}
/// <summary>
/// 执行查询语句,返回第一行第一列数据
/// </summary>
/// <param name="cmdText">Sql语句</param>
/// <param name="ps">参数列表</param>
/// <returns>第一行第一列数据</returns>
public object ExecuteScalar(string cmdText, params SqlParameter[] ps)
{
return ExecuteScalar(cmdText, CommandType.Text, ps);
}
/// <summary>
/// 执行存储过程,返回存储过程返回值
/// </summary>
/// <param name="cmdText">存储过程名称</param>
/// <param name="ps">参数列表</param>
/// <returns>存储过程返回值</returns>
public object ExecuteScalarSP(string cmdText, params SqlParameter[] ps)
{
return ExecuteScalar(cmdText, CommandType.StoredProcedure, ps);
}
/// <summary>
/// 执行查询语句或存储过程,返回第一行第一列数据或存储过程返回值
/// </summary>
/// <param name="cmdText">Sql语句或存储过程名称</param>
/// <param name="ps">参数列表</param>
/// <returns>第一行第一列数据或存储过程返回值</returns>
public object ExecuteScalar(string cmdText, CommandType type, params SqlParameter[] ps)
{
if (type == CommandType.Text)
{
try
{
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand(cmdText, conn))
{
if (ps != null)
{
cmd.Parameters.AddRange(ps);
}
conn.Open();
return cmd.ExecuteScalar();
}
}
}
catch (Exception ex)
{
return ex;
}
}
else if (type == CommandType.StoredProcedure)
{
try
{
for (int i = ; i < ps.Length; i++)
{
if (ps[i].Value == null)
{
ps[i].Direction = ParameterDirection.Output;
}
}
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = new SqlCommand(cmdText, conn))
{
cmd.CommandType = type;
if (ps != null)
{
cmd.Parameters.AddRange(ps);
}
conn.Open();
cmd.ExecuteScalar();
}
}
List<Object> returnValue = new List<object>();
for (int i = ; i < ps.Length; i++)
{
if (ps[i].Direction == ParameterDirection.Output)
{
returnValue.Add(ps[i].Value);
}
}
return returnValue;
}
catch (Exception ex)
{
return ex;
}
}
else
{
return -;
}
}
/// <summary>
/// 执行查询语句,并返回一个DataReader阅读器
/// </summary>
/// <param name="cmdText">Sql语句</param>
/// <param name="ps">参数列表</param>
/// <returns>DataReader阅读器</returns>
public SqlDataReader ExecuteReader(string cmdText, params SqlParameter[] ps)
{
return ExecuteReader(cmdText, CommandType.Text, ps);
}
/// <summary>
/// 执行存储过程,并返回一个DataReader阅读器
/// </summary>
/// <param name="cmdText">存储过程名称</param>
/// <param name="ps">参数列表</param>
/// <returns>DataReader阅读器</returns>
public SqlDataReader ExecuteReaderSP(string cmdText, params SqlParameter[] ps)
{
return ExecuteReader(cmdText, CommandType.StoredProcedure, ps);
}
/// <summary>
/// 执行查询语句或存储过程,并返回一个DataReader阅读器
/// </summary>
/// <param name="cmdText">Sql语句或存储过程名称</param>
/// <param name="ps">参数列表</param>
/// <returns>DataReader阅读器</returns>
public SqlDataReader ExecuteReader(string cmdText, CommandType type, params SqlParameter[] ps)
{
SqlConnection conn = new SqlConnection(connStr);
try
{
using (SqlCommand cmd = new SqlCommand(cmdText, conn))
{
cmd.CommandType = type;
if (ps != null)
{
cmd.Parameters.AddRange(ps);
}
conn.Open();
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
}
catch (Exception ex)
{
conn.Dispose();
throw (ex);
}
}
/// <summary>
/// 执行查询语句,返回DataSet
/// </summary>
/// <param name="cmdText">Sql语句</param>
/// <param name="ps">参数列表</param>
/// <returns>返回的DataSet</returns>
public DataSet GetDataSet(string cmdText, params SqlParameter[] ps)
{
return this.GetDataSet(cmdText, CommandType.Text, ps);
}
/// <summary>
/// 执行存储过程返回DataSet
/// </summary>
/// <param name="cmdText">存储过程名</param>
/// <param name="ps">参数列表</param>
/// <returns>返回DataSet</returns>
public DataSet GetDataSetSP(string cmdText, params SqlParameter[] ps)
{
return this.GetDataSet(cmdText, CommandType.StoredProcedure, ps);
}
/// <summary>
/// 执行存储过程,或SQL语句,返回DataSet
/// </summary>
/// <param name="cmdText">SQL语句或存储过程名称</param>
/// <param name="type">执行类型</param>
/// <param name="ps">参数列表</param>
/// <returns>返回DataSet</returns>
public DataSet GetDataSet(string cmdText, CommandType type, params SqlParameter[] ps)
{
DataSet ds = new DataSet();
try
{
using (SqlDataAdapter sda = new SqlDataAdapter(cmdText, connStr))
{
if (ps != null)
{
sda.SelectCommand.Parameters.AddRange(ps);
}
sda.SelectCommand.CommandType = CommandType.StoredProcedure;
sda.Fill(ds);
}
return ds;
}
catch (Exception ex)
{
ds.Dispose();
throw (ex);
}
}
这个SqlHelper里面用了很多重载,体验会好一点。并且ExecuteScalar里面支持多返回值的存储过程,会以一个List<Object>的形式返回。
支持多返回值存储过程的SqlHelper的更多相关文章
- golang函数——可以为类型(包括内置数据类型)定义函数,类似类方法,同时支持多返回值
不可或缺的函数,在Go中定义函数的方式如下: func (p myType ) funcName ( a, b int , c string ) ( r , s int ) { return } 通过 ...
- C#获取存储过程返回值和输出参数值的方法
//转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...
- c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询
天气预报的程序.程序并不难. 看到这个需求第一个想法就是只要找到合适天气预报接口一切都是小意思,说干就干,立马跟学生沟通价格. 不过谈报价的过程中,差点没让我一口老血喷键盘上,话说我们程序猿的人 ...
- springMVC源码分析--HandlerMethodReturnValueHandler返回值解析器(一)
HandlerMethodReturnValueHandler是用于对Controller中函数执行的返回值进行处理操作的,springMVC提供了多个HandlerMethodReturnValue ...
- C#7.0--引用返回值和引用局部变量
一.在C#7.0以上版本中,方法的返回值可以通过关键字ref指定为返回变量的引用(而不是值)给调用方,这称为引用返回值(Reference Return Value,或ref returns): 1. ...
- C++中的return返回值:return0 or return -1?
C++98 中定义了如下两种 main 函数的定义方式: int main( ) int main( int argc, char *argv[] ) (参考资料:ISO/IEC 14882(19 ...
- C#函数多返回值的方法
C#以前都是不支持多返回值,当需要返回多个值的时候,就会感觉比较麻烦,通常的做法有 1.采用ref,out 关键字返回 2.定义类或者结构体 返回对象 C# 6.0出来了新的语法 Tuple 支付返回 ...
- Go基础:函数多返回值特性
之前在写Python程序的时候,惊叹于它支持多返回值的特性带来的便利性.在学习Go的时候,发现Go也拥有多返回值的特性. 1.基本用法 创建一个多返回值的方法: func getACar() (bra ...
- 013_go语言中的函数多返回值
代码演示 package main import "fmt" func vals() (int, int) { return 3, 7 } func main() { a, b : ...
随机推荐
- [C#] 了解过入口函数 Main() 吗?带你用批处理玩转 Main 函数
了解过入口函数 Main() 吗?带你用批处理玩转 Main 函数 目录 简介 特点 方法的参数 方法的返回值 与批处理交互的一个示例 简介 我们知道,新建一个控制台应用程序的时候,IDE 会同时创建 ...
- css居中div的几种常用方法
在开发过程中,很多需求需要我们居中一个div,比如html文档流当中的一块div,比如弹出层内容部分这种脱离了文档流等.不同的情况有不同的居中方式,接下来就分享下一下几种常用的居中方式. 1.text ...
- 强强联合,Testin云测&云层天咨众测学院开课了!
Testin&云层天咨众测学院开课了! 共享经济时代,测试如何赶上大潮,利用碎片时间给女票或者自己赚点化妆品钱? 2016年12月13日,Testin联手云层天咨带领大家一起推开众测的大门 ...
- WPF 捕获键盘输入事件
最近修改的一个需求要求捕获键盘输入的 Text,包括各种标点符号. 最开始想到的是 PreviewKeyDown 或者 PreviewKeyUp 这样的键盘事件. 但是这两个事件的对象 KeyEven ...
- 通过squid 禁止访问/只允许访问指定 网址
安装 squid yum install squid -y 备份squid.conf cp squid.conf squid.conf-list vi squid.conf 输入: acl de ...
- 跟着老男孩教育学Python开发【第三篇】:Python函数
set 无序,不重复,可嵌套. 函数 创建函数: 1.def关键字,创建函数 2.函数名 3.() 4.函数体 5.返回值 发邮件函数 def sendmail(): import smtpl ...
- Linux网络驱动--snull
snull是<Linux Device Drivers>中的一个网络驱动的例子.这里引用这个例子学习Linux网络驱动. 因为snull的源码,网上已经更新到适合最新内核,而我自己用的还是 ...
- [转] 从知名外企到创业公司做CTO是一种怎样的体验?
这是我近期接受51CTO记者李玲玲采访的一篇文章,分享给大家. 作者:李玲玲来源:51cto.com|2016-12-30 15:47 http://cio.51cto.com/art/201612/ ...
- VS2012+EF6+Mysql配置心路历程
为了学习ORM,选择了EntityFramework,经历了三天两夜的煎熬,N多次错误,在群里高手的帮助下,终于成功,现在将我的心路历程记录下来,一是让自己有个记录,另外就是让其它人少走些弯路. 我的 ...
- ReactNative入门(安卓)——API(下)
LayoutAnimation - layout动画 当布局发生改变时的动画模块,它有两个方法: 1. 最常用的方法是 LayoutAnimation.configureNext(conf<Ob ...