支持多返回值存储过程的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 : ...
随机推荐
- 趣说游戏AI开发:曼哈顿街角的A*算法
0x00 前言 请叫我标题党!请叫我标题党!请叫我标题党!因为下面的文字既不发生在美国曼哈顿,也不是一个讲述美国梦的故事.相反,这可能只是一篇没有那么枯燥的关于算法的文章.A星算法,这个在游戏寻路开发 ...
- vscode 1.5安装体验
1.下载安装 官方下载地址: http://code.visualstudio.com/ 界面截图: 2.图标显示功能File Icon Themes vscode1.5版本文件夹视图,可显示文件类型 ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- 纸箱堆叠 bzoj 2253
纸箱堆叠 (1s 128MB) box [问题描述] P 工厂是一个生产纸箱的工厂.纸箱生产线在人工输入三个参数 n, p, a 之后,即可自动化生产三边边长为 (a mod P, a^2 mod p ...
- JSP 标准标签库(JSTL)
JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...
- GOF23设计模式归类
创建型模式:-单例模式.工厂模式.抽象工厂模式.建造者模式.原型模式结构型模式:-适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式行为型模式:-模板方法模式.命令模式.迭代器模式 ...
- 关于CSS inline-block、BFC以及外边距合并的几个小问题
CSS inline-block和BCF对于初学者来说,总是弄不太明白,下面记录下我在学习这块知识的过程中遇到的几个问题,供大家参考,有不足的地方,欢迎大家批评指正. 一.在什么场景下会出现外边距合并 ...
- Python学习基础
1.使用范围: 大数据 .图像处理.web .运维.爬虫.自动化.科学计算 2.准备环境: linux/mac python 3.5.2 ipython vim/sublime/atom 3.列表 3 ...
- requests源码阅读学习笔记
0:此文并不想拆requests的功能,目的仅仅只是让自己以后写的代码更pythonic.可能会涉及到一部分requests的功能模块,但全看心情. 1.另一种类的初始化方式 class Reques ...
- 数据分布转换:非正态 -> 正态
来源:丁香园论坛:SPSS上的把非正态分布数据转换为正态分布数据 一楼 可以应用变量变换的方法,将不服从正态分布的资料转化为非正态分布或近似正态分布.常用的变量变换方法有对数变换.平方根变换.倒数变换 ...