我写了一个DAL层 并且写了一个调用存储过程的方法在DAL层里 现在的问题就是我如何将我存储过程中OUTPUT类型取到的值返回到表示层来接收这个OUTPUT的值呢?
代码如下
 public int Stored(string str,string str1)
        {            string s = null;
            con.Open();
            SqlCommand com = new SqlCommand(str, con);
            com.CommandType = CommandType.StoredProcedure;
            com.Parameters.Add("@carid", System.Data.SqlDbType.NVarChar, 50);
            com.Parameters.Add("@mess", System.Data.SqlDbType.NVarChar,50);
            com.Parameters["@carid"].Value = str1;
            com.Parameters["@mess"].Direction = ParameterDirection.Output;
                       int i= com.ExecuteNonQuery();
           s = com.Parameters["@mess"].Value.ToString();//这是我已取到的OUTPUT的值,但是不知该如何传出去
           
            con.Close();
            return i;
        }
    }
}

解决方案 »

  1.   

    用  ref 或者 out 传地址,调用的时候:
    string strOutput;
    int result = Stored(str, str1, out strOutput);
    public int Stored(string str,string str1, out strOutput)
            {
               
                con.Open();
                SqlCommand com = new SqlCommand(str, con);
                com.CommandType = CommandType.StoredProcedure;
                com.Parameters.Add("@carid", System.Data.SqlDbType.NVarChar, 50);
                com.Parameters.Add("@mess", System.Data.SqlDbType.NVarChar,50);
                com.Parameters["@carid"].Value = str1;
                com.Parameters["@mess"].Direction = ParameterDirection.Output;
                         int i= com.ExecuteNonQuery();
              strOutput = com.Parameters["@mess"].Value.ToString();//这是我已取到的OUTPUT的值,但是不知该如何传出去
             
                con.Close();
                return i;
            }
        }
    }
      

  2.   


    不好意思,手写错了。
    public int Stored(string str,string str1, out string strOutput)
      

  3.   

    回复1#  
    我那个存储过程的调用方法是写在DAL架构里面的,int result = Stored(str, str1, out strOutput);这个是什么意思呢?请指教 !还有一个问题就是怎么传到外面的呢?在外面来接收呢 我这里的外面指的是
    如下代码using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using Model;
    using BLL;
    using System.Data.SqlClient;
    namespace Parking
    {
        public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {        }        protected void BtnSave_Click(object sender, EventArgs e)
            {
                this.Label1.Text = "已存在相同编号";
                if (this.Txid.Text.Trim() != "")
                {
                    CarInfo get = new CarInfo();
                    get.Carid = this.Txid.Text;
                    Operate p = new Operate();
                    p.StoredProcess(get);
                //这里我想接收@mess 该怎么做?                if (this.Label1.Text != "@mess")
                    {
                        CarInfo hold = new CarInfo();
                        hold.Carguid = Guid.NewGuid().ToString();
                        hold.Carid = this.Txid.Text;
                       hold.CarNumber = this.Txnumber.Text;
                        hold.Intime = this.Txtime.Text;
                        Operate x = new Operate();
                        x.CarIn(hold);
                    }
                    else
                    {
                        return;
                    }
                }        }    }
    }
      

  4.   

    楼主补一补C#基础,ref out 的使用方法。
    //这里我想接收@mess 该怎么做?
    string mess = "";
    int result = Stored(str, str1, out mess);result 是方法的返回值,mess在这个方法被调用后就变成了你要得到的值
      

  5.   

    恩 我昨晚做出来了 把DAL中的这个存储过程的方法修改了下 改成动态添加的,然后透过 parmes SqlParameters[] p作为一个变量参数的集合输入给我这个DAL的存储过程方法,然后通过String msg=com.Parameters[index].values.Tostring();传出去的