• ExecuteNonQuary接收存储过程的输出类型的变量的值


    1、设置所调用的存储过程需要的参数

    public decimal CreateOrder(string orderId, int userId, string address)
            {
                SqlParameter[] parameters = new SqlParameter[] { 
                     new SqlParameter("@orderId",SqlDbType.NVarChar,30),
                     new SqlParameter("@userId",SqlDbType.Int,4),
                    new SqlParameter("@address",SqlDbType.NVarChar,255),
                     new SqlParameter("@totalPrice",SqlDbType.Money)
                };
                parameters[0].Value = orderId;
                parameters[1].Value = userId;
                parameters[2].Value = address;
                //设置参数为输出参数,默认是InPut(输入参数)
                parameters[3].Direction = ParameterDirection.Output;
                //调用执行存储过程的方法                     DBUtility.DBHelperSQL.ExecuteNonQueryProc("usp_CreateOrder", parameters);
                return Convert.ToDecimal(parameters[3].Value);
            }
    View Code

    关键是设置参数为输出参数,默认是InPut(输入参数)  parameters[3].Direction = ParameterDirection.Output;

    2、执行存储过程的方法

    public static decimal ExecuteNonQueryProc(string cmdtext, params SqlParameter[] parameters)
            {
                using (SqlConnection conn = new SqlConnection(connstr))
                {
                    conn.Open();
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        //设置SqlCommand的类型为存储过程--StoredProcedure
                        cmd.CommandType = CommandType.StoredProcedure;
                        //这个的cmdText是存储过程名
                        cmd.CommandText = cmdtext;
                        //给这个存储过程传变量
                        cmd.Parameters.AddRange(parameters);
                        return cmd.ExecuteNonQuery();
                    }
                }
            }
    View Code

    一开始我有一个疑问,ExecuteNonQuary 方法,返回的是受影响的行数,怎么会把输出的参数传出来?

    原来,当你把参数的 Direction 设置为 OutPut 后,把这个参数传给存储过程,那么在存储过程里,这个参数就被赋值了

    然后在程序里,调用参数的 Value 属性(parameters[3].Value)得到参数的值

    意思就是,这个存储过程只要成功执行了,那么你传进去的那个设置为 OutPut 的参数就已经被赋值了,不用理会 ExecuteNonQuary 方法返回的值,只管运行这个方法就好

  • 相关阅读:
    java 基础7
    java 基础5
    java 基础6
    java 基础4
    java 基础2
    java 基础3
    java 基础1
    使用HTML的基本结构创建网页
    jsp Servlet 文件上传
    Filter过滤器 不登陆无法访问其他页面
  • 原文地址:https://www.cnblogs.com/wanly/p/3489013.html
Copyright © 2020-2023  润新知