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的更多相关文章

  1. golang函数——可以为类型(包括内置数据类型)定义函数,类似类方法,同时支持多返回值

    不可或缺的函数,在Go中定义函数的方式如下: func (p myType ) funcName ( a, b int , c string ) ( r , s int ) { return } 通过 ...

  2. C#获取存储过程返回值和输出参数值的方法

    //转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...

  3. c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询

    天气预报的程序.程序并不难. 看到这个需求第一个想法就是只要找到合适天气预报接口一切都是小意思,说干就干,立马跟学生沟通价格. ​ ​不过谈报价的过程中,差点没让我一口老血喷键盘上,话说我们程序猿的人 ...

  4. springMVC源码分析--HandlerMethodReturnValueHandler返回值解析器(一)

    HandlerMethodReturnValueHandler是用于对Controller中函数执行的返回值进行处理操作的,springMVC提供了多个HandlerMethodReturnValue ...

  5. C#7.0--引用返回值和引用局部变量

    一.在C#7.0以上版本中,方法的返回值可以通过关键字ref指定为返回变量的引用(而不是值)给调用方,这称为引用返回值(Reference Return Value,或ref returns): 1. ...

  6. C++中的return返回值:return0 or return -1?

    C++98 中定义了如下两种 main 函数的定义方式: int main( ) int main( int argc, char *argv[] )   (参考资料:ISO/IEC 14882(19 ...

  7. C#函数多返回值的方法

    C#以前都是不支持多返回值,当需要返回多个值的时候,就会感觉比较麻烦,通常的做法有 1.采用ref,out 关键字返回 2.定义类或者结构体 返回对象 C# 6.0出来了新的语法 Tuple 支付返回 ...

  8. Go基础:函数多返回值特性

    之前在写Python程序的时候,惊叹于它支持多返回值的特性带来的便利性.在学习Go的时候,发现Go也拥有多返回值的特性. 1.基本用法 创建一个多返回值的方法: func getACar() (bra ...

  9. 013_go语言中的函数多返回值

    代码演示 package main import "fmt" func vals() (int, int) { return 3, 7 } func main() { a, b : ...

随机推荐

  1. Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩

    目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...

  2. Oracle 数据库知识汇总篇

    Oracle 数据库知识汇总篇(更新中..) 1.安装部署篇 2.管理维护篇 3.数据迁移篇 4.故障处理篇 5.性能调优篇 6.SQL PL/SQL篇 7.考试认证篇 8.原理体系篇 9.架构设计篇 ...

  3. RIFF和WAVE音频文件格式

    RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构.RIFF文 ...

  4. Could not evaluate expression

    VS15 调试变量不能显示值,提示:Could not evaluate expression 解决办法: 选择"在调试时显示运行以单击编辑器中的按钮"重启VS即可. 可参考:Vi ...

  5. 异步 HttpContext.Current 为空null 另一种解决方法

    1.场景 在导入通讯录过程中,把导入的失败.成功的号码数进行统计,然后保存到session中,客户端通过轮询显示状态. 在实现过程中,使用的async调用方法,出现HttpContext.Curren ...

  6. Android——eclipse下运行android项目报错 Conversion to Dalvik format failed with error 1解决

    在eclipse中导入android项目,项目正常没有任何错误,但是运行时候会报错,(clean什么的都没用了.....)如图: 百度大神大多说是jdk的问题,解决: 右键项目-Properties如 ...

  7. SqlServer之数据库三大范式

    分析: 数据库设计应遵循三大范式分别为: 第一范式:确保表中每列的原子性(不可拆分): 第二范式:确保表中每列与主键相关,而不能只与主键的某部分相关(主要针对联合主键),主键列与非主键列遵循完全函数依 ...

  8. 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)

    vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...

  9. ASP.NET Core 在 JSON 文件中配置依赖注入

    前言 在上一篇文章中写了如何在MVC中配置全局路由前缀,今天给大家介绍一下如何在在 json 文件中配置依赖注入. 在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等 ...

  10. 使用“Cocos引擎”创建的cpp工程如何在VS中调试Cocos2d-x源码

    前段时间Cocos2d-x更新了一个Cocos引擎,这是一个集合源码,IDE,Studio这一家老小的整合包,我们可以使用这个Cocos引擎来创建我们的项目. 在Cocos2d-x被整合到Cocos引 ...