C#调用存储过程,获取 output 参数
时间:2011-04-27 来源:Dreamer57
// C#调用存储过程
public Hashtable GetAmount(string userId)
{
string procedureName = "SP_GetAmount";
SqlParameter[] param = new SqlParameter[] { new SqlParameter("@AllAmount", SqlDbType.Decimal), new SqlParameter("@MonthAmount", SqlDbType.Decimal), new SqlParameter("@UserID", userId) };
param[2].Direction = ParameterDirection.Input; // 设置输入参数
param[0].Direction = ParameterDirection.Output; // 输出参数 这里故意把位置能乱,为了说明C#调用存储过程参数是以 名称=参数 匹配的
param[1].Direction = ParameterDirection.Output; // 注意输出参数 必须 new SqlParameter("@MonthAmount", SqlDbType.Decimal) 设定DbType
return new DBHelper().RunProcedure(procedureName, param);
}
// DBHelper 中 RunProcedure 函数内容
public Hashtable RunProcedure(String procedureName, IDataParameter[] parameters)
{
Hashtable result = new Hashtable();
try
{
using (SqlConnection connection = this.Connection)
{
using (SqlCommand cmd = new SqlCommand(procedureName, connection))
{
// 注意这里要把CommandType设为StoredProcedure解析为存储过程
// 也可默认为Text 以SQL语句模式解析,这样调用存储过程就要用SQL语句 EXEC <存储过程名> <参数...> 写 SQL 语句调用
cmd.CommandType = CommandType.StoredProcedure;
if (parameters != null)
{
cmd.Parameters.AddRange(parameters);
}
cmd.ExecuteNonQuery();
foreach (SqlParameter param in cmd.Parameters)
{
// 这里把输出参数放到一个 HashTable 里面,方便取出
if (param.Direction == ParameterDirection.Output || param.Direction == ParameterDirection.InputOutput || param.Direction == ParameterDirection.ReturnValue)
{
result.Add(param.ParameterName, param.Value);
}
}
}
}
}
catch (Exception)
{
return null;
}
return result;
}
// 取出 output 参数时
Hashtable amount = orderBIZ.GetAmount(Request.Cookies["LoginUser"].Value);
ViewData["AllAmount"] = amount["@AllAmount"]; // 取出 output 参数
ViewData["MonthAmount"] = amount["@MonthAmount"];
非常幼稚的东西了,都不好意思发了,不过还是发了 - -
相关阅读 更多 +