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. C++随笔:.NET CoreCLR之GC探索(1)

    一直是.NET程序员,但是.NET的核心其实还是C++,所以我准备花 一点时间来研究CoreCLR和CoreFX.希望这个系列的文章能给大家带来 帮助. GC的代码有很多很多,而且结构层次对于一个初学 ...

  2. IT持续集成之质量管理

    研发工具生态 质量相关工作 一次编译产出测试包与上线包 !从源头保证版本的⼀一致性!代码质量控制! 全⽅方位的⾃自动化测试体系保证! 提测冒烟效率! 全⾃自动上线流程杜绝⼈人⼯工犯错! 生产环境应⽤用 ...

  3. 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比

    C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...

  4. Atitit  godaddy 文件权限 root权限设置

    Atitit  godaddy 文件权限 root权限设置 1. ubuntu需要先登录,再su切换到root1 2. sudo 授权许可使用的su,也是受限制的su1 3. ubuntu默认吗roo ...

  5. 在redis中使用lua脚本让你的灵活性提高5个逼格

    在redis的官网上洋洋洒洒的大概提供了200多个命令,貌似看起来很多,但是这些都是别人预先给你定义好的,但你却不能按照自己的意图进行定制, 所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了 ...

  6. grunt配置任务

    这个指南解释了如何使用 Gruntfile 来为你的项目配置task.如果你还不知道 Gruntfile 是什么,请先阅读 快速入门 指南并看看这个Gruntfile 实例. Grunt配置 Grun ...

  7. mono中发送邮件并保存本次收件人的地址

    在ios端mono开发中,发送邮件可以选择调用ios原生email程序.有两种方式实现这种功能,一是程序跳转到ipad中email程序,另外一种是将发送邮件的界面在自己应用里弹出. 首先第一种方式的代 ...

  8. 【已解决】Https请求——基础连接已经关闭 发送时发生错误

    本人在做商用项目的推送消息功能时,借助第三方推送服务.这里避免有打广告的嫌疑,就不报名字了.由于是通过调用API接口,所以Post方法是自己写的,但是在开发环境是可以正常推送的,但是一上线就出各种问题 ...

  9. 腾讯云下安装 nodejs + 实现 Nginx 反向代理

    本文将介绍如何给腾讯云上的 Ubuntu Server 12.04 LTS 64位主机安装 node 及 nginx,并简单配置反向代理. 笔者在整个安装过程中遇到不少麻烦(不赘述),如果你希望少踩坑 ...

  10. Lesson 20 One man in a boat

    Text Fishing is my favourite sport. I often fish for hours without catching anything. But this does ...