通过下面的例子代码来说明一下吧!
// 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"];