日期:2014-05-17  浏览次数:20780 次

C# 调用带参数、返回值的存储过程
存储过程: ALTER PROCEDURE [dbo].[p_translate] 
@p_transno VARCHAR(20) ,
@p_usrid varchar(8) ,
@p_return varchar(50) OUTPUT

现需要获取@p_return 值,如何操作?看网上许多的例子,自己调用还是有问题,刚接触C#,也不太会调试,望大神给出详细步骤,最好能像下面的函数一样返回一个数值
  public decimal sumCash()
  {
  decimal sum = 0;
  SqlConnection con = Connection.Conn();
  try
  {
  con.Open();
  string sql = string.Format("select sum(amount) from trans ");
  SqlCommand cmd1 = new SqlCommand(sql, con);
  object sum = cmd1.ExecuteScalar();
  sum = Convert.ToDecimal(sum);
  }
  catch (Exception ex)
  {
  Response.Write("<script language='javascript'>alert('" + ex.Message + "');</script>");
  }
  return sum;
  }

------解决方案--------------------
SqlCommand 没有添加参数
http://www.cnblogs.com/VitoriaTang/archive/2006/08/04/467765.html
------解决方案--------------------
你可以在把.net中参数的值带到oracle中,用dbms_output.put_line('')一步步输出值,看哪里没有输出,就是哪里有问题了。
------解决方案--------------------
大概是这个意思吧,另外存储过程也可以调试看看。
C# code

       public decimal sumCash()
        {
            decimal sum = 0;
            SqlConnection con = Connection.Conn();
            try
            {
                con.Open();
                SqlCommand cmd1 = con.CreateCommand();
                cmd1.CommandType = CommandType.StoredProcedure;

                SqlParameter parameter = new SqlParameter("@p_return", 0);
                parameter.Direction = ParameterDirection.Output;
                cmd1.Parameters.Add(parameter);
                cmd1.ExecuteNonQuery();
                sum = Convert.ToDecimal(cmd1.Parameters["@p_return"].Value.ToString());

            }
            catch (Exception ex)
            {

            }
            return sum;
        }