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

时间:2023-03-09 19:45:25
ExecuteNonQuary接收存储过程的输出类型的变量的值

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

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

关键是设置参数为输出参数,默认是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();
}
}
}

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

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

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

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