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 方法返回的值,只管运行这个方法就好

原文地址:https://www.cnblogs.com/wanly/p/3489013.html