如何使用C# 操作存储过程,执行sql语句?

闲话不多说,直接上代码:

    /// <summary>
    /// Sql通用类
    /// </summary>
    public class SqlHelper
    {
       首先配置连接字符串
        public static string connStr = ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;//ConnString表示webconfig中的连接字符串
 
       执行存储过程不设置超时时间
        /// <summary>
        /// 调用存储过程
        /// </summary>
        /// <param name="connStr">连接字符串</param>
        /// <param name="storedProcedureName">存储过程名称</param>
        /// <param name="ResponseBool">存储过程执行状态</param>
        /// <param name="ResponseMsg">执行存储过程状态描述</param>
        /// <param name="paramsObject">存储过程输入参数</param>
        /// <returns></returns>
        public static DataSet Sql_GetStoredProcedureFunction(string connStr, string storedProcedureName, out bool ResponseBool, out string ResponseMsg, params ParameterKeyValuesEntity[] paramsObject)
        {
            DataSet ResponseDs = new DataSet();
            ResponseBool = true;
            ResponseMsg = "获取成功!";
            try
            {
                using (SqlConnection sqlConn = new SqlConnection(connStr))
                {
                    sqlConn.Open();
                    using (SqlCommand sqlCmd = new SqlCommand(storedProcedureName, sqlConn))
                    {
                        sqlCmd.CommandType = CommandType.StoredProcedure;
                        if (paramsObject.Count() > 0)
                        {
                            for (int i = 0; i < paramsObject.Count(); i++)
                            {
                                SqlParameter sqlParameter = new SqlParameter(paramsObject[i].Key, paramsObject[i].Value);
                                sqlCmd.Parameters.Add(sqlParameter);
                            }
                        }
                        SqlDataAdapter sda = new SqlDataAdapter(sqlCmd);
                        sda.Fill(ResponseDs);
                    }
                }
            }
            catch (Exception e)
            {
                ResponseBool = false;
                ResponseMsg = $"查询存储过程时出现异常,存储过程:【{storedProcedureName}】\n 异常原因:【{e.Message}】\n 异常详细信息:【{e.StackTrace}】!";
            }
            return ResponseDs;
        }
 
        当存储过程执行时间太长时,存储过程的默认超时时间是30s,需要设置存储过程执行超时时间
        /// <summary>
        /// 调用存储过程  (自定义超时时间)
        /// </summary>
        /// <param name="connStr">连接字符串</param>
        /// <param name="storedProcedureName">存储过程名称</param>
        /// <param name="commandOutTime">执行存储过程请求超时时间(单位:s)</param>
        /// <param name="ResponseBool">存储过程执行状态</param>
        /// <param name="ResponseMsg">执行存储过程状态描述</param>
        /// <param name="paramsObject">存储过程输入参数</param>
        /// <returns></returns>
        public static DataSet Sql_GetStoredProcedureFunction(string connStr, string storedProcedureName, int commandOutTime, out bool ResponseBool, out string ResponseMsg, params ParameterKeyValuesEntity[] paramsObject)
        {
            DataSet ResponseDs = new DataSet();
            ResponseBool = true;
            ResponseMsg = "获取成功!";
            try
            {
                using (SqlConnection sqlConn = new SqlConnection(connStr))
                {
                    sqlConn.Open();
                    using (SqlCommand sqlCmd = new SqlCommand(storedProcedureName, sqlConn))
                    {
                        sqlCmd.CommandType = CommandType.StoredProcedure;
                        sqlCmd.CommandTimeout = commandOutTime;
                        if (paramsObject.Count() > 0)
                        {
                            SqlParameter[] sqlParameters = new SqlParameter[paramsObject.Count()];
                            for (int i = 0; i < paramsObject.Count(); i++)
                            {
                                SqlParameter sqlParameter = new SqlParameter(paramsObject[i].Key, paramsObject[i].Value);
                                sqlCmd.Parameters.Add(sqlParameter);
                            }
                        }
                        SqlDataAdapter sda = new SqlDataAdapter(sqlCmd);
                        sda.Fill(ResponseDs);
                    }
                }
            }
            catch (Exception e)
            {
                ResponseBool = false;
                ResponseMsg = $"查询存储过程时出现异常,存储过程:【{storedProcedureName}】\n 异常原因:【{e.Message}】\n 异常详细信息:【{e.StackTrace}】!";
            }
            return ResponseDs;
        }
 
        执行sql语句,进行增删改操作
        /// <summary>
        /// 增删改数据
        /// </summary>
        /// <param name="sqlConnStr, ">数据库连接字符串</param>
        /// <param name="sql">执行的sql语句</param>
        /// <param name="paramsObject">输入参数</param>
        /// <returns></returns>
        public static int SQLExecuteData(string sqlConnStr, string sql, params ParameterKeyValuesEntity[] paramsObject)
        {
            int count = 0;
            using (SqlConnection conn = new SqlConnection(sqlConnStr))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql, conn); //定义一个sql操作命令对象
                if (paramsObject.Count() > 0)
                {
                    for (int i = 0; i < paramsObject.Count(); i++)
                    {
                        SqlParameter sqlParameter = new SqlParameter(paramsObject[i].Key, paramsObject[i].Value);
                        cmd.Parameters.Add(sqlParameter);
                    }
                }
                count = cmd.ExecuteNonQuery(); //执行语句
                conn.Close(); //关闭连接
                cmd = null;
                conn.Dispose(); //释放对象
            }
            return count;
        }
 
      当数据库中表关系及其复杂,并且数据量特别多的时候(一般情况下用缓存解决问题),执行sql查询语句相当耗时,需要设置sql语句请求超时时间。
      执行sql查询语句,设置sql查询语句超时时间
        /// <summary>
        /// 执行SQL脚本
        /// </summary>
        /// <param name="connStr">连接字符串</param>
        /// <param name="sqlScript">SQL脚本</param>
        /// <param name="ResponseBool">执行状态</param>
        /// <param name="ResponseMsg">状态描述</param>
        /// <param name="commandOutTime">执行sql语句请求超时时间(单位:s)</param>
        /// <param name="paramsObject">输入参数</param>
        /// <returns></returns>
        public static DataSet Sql_GetStored(string connStr, string sqlScript, out bool ResponseBool, out string ResponseMsg, int commandOutTime = 500, params ParameterKeyValuesEntity[] paramsObject)
        {
            DataSet ResponseDs = new DataSet();
            ResponseBool = true;
            ResponseMsg = "获取成功!";
            try
            {
                using (SqlConnection sqlConn = new SqlConnection(connStr))
                {
                    sqlConn.Open();
                    using (SqlCommand sqlCmd = new SqlCommand(sqlScript, sqlConn))
                    {
                        sqlCmd.CommandType = CommandType.Text;
                        sqlCmd.CommandTimeout = commandOutTime;
                        if (paramsObject.Count() > 0)
                        {
                            for (int i = 0; i < paramsObject.Count(); i++)
                            {
                                SqlParameter sqlParameter = new SqlParameter(paramsObject[i].Key, paramsObject[i].Value);
                                sqlCmd.Parameters.Add(sqlParameter);
                            }
                        }
                        SqlDataAdapter sda = new SqlDataAdapter(sqlCmd);
                        sda.Fill(ResponseDs);
                    }
                }
            }
            catch (Exception e)
            {
                ResponseBool = false;
                ResponseMsg = $"查询存储过程时出现异常,SQL脚本:【{sqlScript}】\n 异常原因:【{e.Message}】\n 异常详细信息:【{e.StackTrace}】!";
            }
            return ResponseDs;
        }
    
    入参实体建类
    /// <summary>
    /// 输入参数实体   参数名称(Key)/参数值(Value)
    /// </summary>
    public class ParameterKeyValuesEntity
    {
        /// <summary>
        /// 参数名称
        /// </summary>
        public string Key { get; set; }
        /// <summary>
        /// 参数值
        /// </summary>
        public object Value { get; set; }
    }
 
 
 
 
 
 执行存储过程示例:
 public Result 方法名(string 入参1,string 入参2, string 入参3)
        {
            try
            {            
                //定义输出参数
                Result result = new Result();
                //存储过程名称
                string procName = "存储过程名称";
                #region -- 执行存储过程获取数据
                //返回值状态
                bool responseBool = true;
                //返回值状态描述
                string responseMsg = string.Empty;
                //存储过程输入参数实体
                ParameterKeyValuesEntity[] parameterKeyValue = new ParameterKeyValuesEntity[]
                {
                new ParameterKeyValuesEntity(){Key="@存储过程入参1",Value=赋值1},
                new ParameterKeyValuesEntity(){Key="@存储过程入参2",Value=赋值2},
                new ParameterKeyValuesEntity(){Key="@存储过程入参3",Value=赋值3},        
                };
                //使用sql通用类的方法执行存储过程
                DataSet ds = SqlHelper.Sql_GetStoredProcedureFunction(connStr, procName, out responseBool, out responseMsg, parameterKeyValue);
                if (!responseBool)
                {
                    result.code = "204";
                    result.msg = $"查询存储过程时出现异常,异常信息:{responseMsg}";
                    ExceptionLogHelper.WriteLog($"业务异常:存储过程名:{procName}---异常信息:{responseMsg}");//项目中的异常日志
                    return result;
                }
                DataTable dt = ds.Tables[0];            
                if (dt != null && dt.Rows != null && dt.Rows.Count > 0)
                {
                    获取存储过程执行后的数据,给实体类赋值
                }
                #endregion
                result.data = loopbackdata;
                string json = JsonConvert.SerializeObject(result.data);
                result = ResultHelper.ReturnResultSuccess(json, typeof(JObject));
                return result;
            }
            catch (Exception e)
            {
                ExceptionLogHelper.WriteLog($"业务异常:{e}");
                return ResultHelper.ReturnResultError($"异常信息:{e}");
            }
        }
 
       The END.......................

使用C# 操作存储过程,执行sql语句通用类的更多相关文章

  1. Entity Framework Code First执行SQL语句、视图及存储过程

    1.Entity Framework Code First查询视图 Entity Framework Code First目前还没有特别针对View操作的方法,但对于可更新的视图,可以采用与Table ...

  2. 总结一些关于操作数据库是sql语句还是存储过程问题

    总结一些关于操作数据库是sql语句还是存储过程问题 程序中,你跟数据的交互,需要向数据库拿数据.更改数据库的数据等,这些操作,本身不是程序完成的,而是程序发命令给数据库去做的,不管是通过sql语句方式 ...

  3. Entity Framework Core 执行SQL语句和存储过程

    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...

  4. 如何用VS EF连接 Mysql,以及执行SQL语句 和存储过程?

    VS2013, MySQL5.7.18 , MySQL5.7.14 执行SQL语句: ztp_user z = new ztp_user(); object[] obj = new object[] ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-EF执行SQL语句与存储过程

    这一节,我们来看看EF如何执行SQL语句与读取存储过程的数据,可能有一部分人,还不知道EF如何执行存储过程与原生SQL语句! 我们什么时候要直接使用原生的SQL语句? 返回值过于复杂 过于复杂的联合查 ...

  6. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  7. 使用Mysql执行SQL语句基础操作

    SQL:  又叫结构化语言,是一种用来操作RDBMS的数据库语言,在关系型数据库中都支持使用SQL语句,如oracle.mysql等等. 注意: 在关系型数据库中sql语句是通用的,而在非关系型数据库 ...

  8. EF Core 执行SQL语句和存储过程

    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...

  9. C#参数化执行SQL语句,防止漏洞攻击本文以MySql为例【20151108非查询操作】

    为什么要参数化执行SQL语句呢? 一个作用就是可以防止用户注入漏洞. 简单举个列子吧. 比如账号密码登入,如果不用参数, 写的简单点吧,就写从数据库查找到id和pw与用户输入一样的数据吧 sql:se ...

随机推荐

  1. set的便捷操作

    认识集合 由一个或多个确定的元素所构成的整体叫做集合. 集合中的元素有三个特征: 1.确定性(集合中的元素必须是确定的) 2.互异性(集合中的元素互不相同.例如:集合A={1,a},则a不能等于1) ...

  2. 多线程学习系列二(使用System.Threading)

    一.什么是System.Threading.Thread?如何使用System.Threading.Thread进行异步操作 System.Threading.Thread:操作系统实现线程并提供各种 ...

  3. 『性能』ServiceStack.Redis 和 StackExchange.Redis 性能比较

    背景 近来,需要用到 Redis 这类缓存技术 —— MongoDB 和 Redis 没有进行过比较. 我也懒得在这些细节上 纠结那么多 —— 按照网友给出的文章,听从网友建议,选择 Redis. R ...

  4. Python:轻量级 ORM 框架 peewee 用法详解(二)——增删改查

    说明:peewee 中有很多方法是延时执行的,需要调用 execute() 方法使其执行.下文中不再特意说明这个问题,大家看代码. 本文中代码样例所使用的 Person 模型如下: class Per ...

  5. .net mvc前台如何接收和解析后台的字典类型的数据

    很久没有写博客了,最近做了一个公司门户网站的小项目,其中接触到了一些我不会的知识点,今日事情少,便记录一下,当时想在网上搜索相关的内容,但是没有找到. 今天想记录一下这样一个小的需求的做法.先说一下我 ...

  6. 《Jave并发编程的艺术》学习笔记(1-2章)

    Jave并发的艺术 并发编程的挑战 上下文切换 CPU通过时间片分配算法来循环执行任务,当前时间片执行完之后会切换到下一个任务.但是,切换会保存上一个任务的状态,一遍下次切换回这个任务时,可以再次加载 ...

  7. maven下载及安装最详解

    maven的下载及安装 1.maven下载地址:https://maven.apache.org/download.cgi 2.将下载的安装包解压到自定义目录 3.配置环境变量 此电脑->右键属 ...

  8. html学习之路--简单图片轮播

    一个简单的图片轮播效果 photo.html页面代码,基本的HTML结构,在main中显示图片,此处图片依次命名为1.jpg.2.jpg.3.jpg.4.jpg. <!DOCTYPE html& ...

  9. Android之应用市场排行榜、上架、首发

    文章大纲 一.应用市场排行榜介绍二.应用市场上架介绍三.应用市场首发介绍四.参考文档   一.应用市场排行榜介绍   iiMedia Research(艾媒咨询)权威发布<2017-2018中国 ...

  10. v4v7升级到androidx过程

    因为原项目应用的都是v4v7包,谷歌改成androidx后就升级了一番,首先在properties文件 然后在菜单里点击升级,studio会帮你把报名什么的都改掉 打开项目,发现都自动改掉了,完美,然 ...