我创建了一个通用函数来从C#调用存储过程。代码如下所示:
public static void executeStoredProcedure(string SPName, Dictionary<string, object> parameters, string connectionStringName)
{
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand(SPName, con))
{
cmd.CommandType = CommandType.StoredProcedure;
if (parameters != null)
{
foreach (KeyValuePair<string, object> kvp in parameters)
cmd.Parameters.Add(new SqlParameter(kvp.Key, kvp.Value));
}
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
}
我使用它时的代码是这样的:
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("UserId", UserId);
parameters.Add("UserName", UserName);
GlobalClass.executeStoredProcedure("UpdateUserName", parameters, "userDB");
如何修改它以便能够使用具有输出参数的存储过程,并将输出存储在C#变量中?
答案 0 :(得分:1)
您可以使用SqlParameter
数组而不是Dictionary<string, object>
。例如
SqlParameter[] parameters = new SqlParameter[]
{
new SqlParameter() {ParameterName = "@UserId", SqlDbType = SqlDbType.NVarChar, Direction = ParameterDirection.Input, Value= UserId},
new SqlParameter() {ParameterName = "@UserName", SqlDbType = SqlDbType.NVarChar, Direction = ParameterDirection.Input, Value = UserName},
new SqlParameter() {ParameterName = "@OutValue", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Output},
};
GlobalClass.executeStoredProcedure("UpdateUserName", parameters, "userDB");
要在C#变量中存储输出,请使用
int OutVal = Convert.ToInt32(cmd.Parameters["@OutValue"].Value);
您可以将此值作为executeStoredProcedure
函数结果返回,或将此值指定给外部变量。
答案 1 :(得分:0)
要获得输出,您必须使用返回方向而不是默认输入方向指定输出参数。
SqlParameter retVal = new SqlParameter("@retVal", SqlDbType.YOURTYPE);
retVal.Direction = ParameterDirection.ReturnValue;
parameters.Add(parm);
//your code
cmd.ExecuteNonQuery();
object val = retVal.Value;
//your code
然后,将bool传递给executeStoredProcedure
并返回一个对象或创建一个具有返回值的新方法,并使用bool返回一个值。
答案 2 :(得分:0)
我的方法类似。我曾经使用List返回类型,我得到动态expandoObject的sp结果。当我搜索这个问题时,answer帮助了我。