使用SqlCommand的ExecuteScalar来执行这个存储过程,执行的结果就是返回结果。SqlCommand cmd;
//
//cmd的创建
//
cmd.CommandText=存储过程名
//
//这里为cmd添加必要的Parameter
//
cmd.CommandType=CommandType.Procedure;//似乎拼写错误,查阅一下文档吧
object objReturnValue=cmd.ExecuteScalar();下面就是根据你存储过程返回的数据类型,把objReturnValue强制转换为实际的类型。

解决方案 »

  1.   

    add a command parameter of ReturnValue direction, seeUsing Stored Procedures with a Command
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconusingstoredprocedureswithcommand.asp
    Dim sampParm As SqlParameter = sampleCMD.Parameters.Add("RETURN_VALUE", SqlDbType.Int)
    sampParm.Direction = ParameterDirection.ReturnValuecmd.ExecuteNonQuery()
    Console.WriteLine("RETURN_VALUE: {0}", sampleCMD.Parameters("RETURN_VALUE").Value
      

  2.   

    oCommand.CommandType = CommandType.StoredProcedure ;
    oCommand.CommandText ="存储过程名";
    oCommand.Parameters.Add("@ReturnValue",SqlDbType.Char,20);
    oCommand.Parameters["@ReturnValue"].Direction = ParameterDirection.ReturnValue ;
    oCommand.ExecuteNoQuery();Response.Write(oCommand.Parameters["@ReturnValue"].value.ToString());
      

  3.   

    参看一下MSDN的帮助:
    ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconinputoutputparametersreturnvalues.htmDim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;" & _
                                                          "Initial Catalog=northwind")Dim catDA As SqlDataAdapter = New SqlDataAdapter("SELECT CategoryID, CategoryName FROM Categories", nwindConn)catDA.InsertCommand = New SqlCommand("InsertCategory" , nwindConn)
    catDA.InsertCommand.CommandType = CommandType.StoredProcedureDim myParm As SqlParameter = catDA.InsertCommand.Parameters.Add("@RowCount", SqlDbType.Int)
    myParm.Direction = ParameterDirection.ReturnValuecatDA.InsertCommand.Parameters.Add("@CategoryName", SqlDbType.NChar, 15, "CategoryName")myParm = catDA.InsertCommand.Parameters.Add("@Identity", SqlDbType.Int, 0, "CategoryID")
    myParm.Direction = ParameterDirection.OutputDim catDS As DataSet = New DataSet()
    catDA.Fill(catDS, "Categories")Dim newRow As DataRow = catDS.Tables("Categories").NewRow()
    newRow("CategoryName") = "New Category"
    catDS.Tables("Categories").Rows.Add(newRow)catDA.Update(catDS, "Categories")Dim rowCount As Int32 = CInt(catDA.InsertCommand.Parameters("@RowCount").Value)
      

  4.   

    这是我刚用的一个存储过程,Pre_YGT和YGT_ID是输入的参数,Out_Flag是输入的参数,也就是你要的返回值。现在可以直接调用返回值Out_Flag了...
            cmd = New SqlCommand("type_zhibiao", con)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("@YGT_ori", SqlDbType.Char).Value = Pre_YGT
            cmd.Parameters.Add("@YGT_tar", SqlDbType.Char).Value = YGT_ID
            parmlastname = cmd.Parameters.Add("@out_flag", SqlDbType.Char)
            parmlastname.Size = 1
            parmlastname.Direction = ParameterDirection.Output        cmd.ExecuteNonQuery()
            Out_Flag = (cmd.Parameters("@out_flag").Value).ToString
      

  5.   

    参考public bool updatePass()
    {
    SqlParameter[] parameters =
    {
    new SqlParameter( "@username", SqlDbType.VarChar, 30 ),
    new SqlParameter( "@Passold", SqlDbType.Binary,  30 ),
    new SqlParameter( "@Passnew", SqlDbType.Binary,  30 ),
    new SqlParameter( "@", SqlDbType.VarChar, 1 ),
    }; // Set parameter values and directions parameters[ 0 ].Value     = m_account;
    parameters[ 1 ].Value     = m_passwordold;
    parameters[ 2 ].Value     = m_passwordnew;
    parameters[ 3 ].Direction = ParameterDirection.Output;
    // Run the stored procedure

    bool isValid = false;
    StoredProcedure sproc = new StoredProcedure(  "OA", "Update_Password", parameters );
    try
    {
    isValid = sproc.Run() == 0;
    if ( isValid )
    {

     = ( string )parameters[ 3 ].Value;
    }
    }
    catch
    { }
    finally
    {
    if(sproc != null)
    sproc.Dispose();
    }

    return isValid;
    }
      

  6.   

    //取到存储过程的返回值
    public int TMovie_insert()
    {
    int id=0; //使用存储过程
    SqlConnection con=conSQL.getConnection();
    SqlCommand cmd=new SqlCommand("Insert_TMovie",con);
    cmd.CommandType=CommandType.StoredProcedure; //向存储过程添加参数
    SqlParameter prmClassID=new SqlParameter("@ClassID",SqlDbType.Int,4);
    prmClassID.Value=ClassID;
    cmd.Parameters.Add(prmClassID); SqlParameter prmCName=new SqlParameter("@CName",SqlDbType.VarChar);
    prmCName.Value=CName;
    cmd.Parameters.Add(prmCName); SqlParameter prmEName=new SqlParameter("@EName",SqlDbType.VarChar);
    prmEName.Value=EName;
    cmd.Parameters.Add(prmEName); SqlParameter prmMovieCompany=new SqlParameter("@MovieCompany",SqlDbType.VarChar);
    prmMovieCompany.Value=MovieCompany;
    cmd.Parameters.Add(prmMovieCompany); SqlParameter prmStateDate=new SqlParameter("@StateDate",SqlDbType.DateTime);
    prmStateDate.Value=Convert.ToDateTime(StateDate);
    cmd.Parameters.Add(prmStateDate); SqlParameter prmRendper=new SqlParameter("@Rendper",SqlDbType.VarChar);
    prmRendper.Value=Rendper;
    cmd.Parameters.Add(prmRendper); SqlParameter prmDirector=new SqlParameter("@Director",SqlDbType.VarChar);
    prmDirector.Value=Director;
    cmd.Parameters.Add(prmDirector); SqlParameter prmContext=new SqlParameter("@Context",SqlDbType.VarChar);
    prmContext.Value=Context;
    cmd.Parameters.Add(prmContext); SqlParameter prmLay_Rate=new SqlParameter("@Lay_Rate",SqlDbType.Int);
    prmLay_Rate.Value=Lay_Rate;
    cmd.Parameters.Add(prmLay_Rate); SqlParameter prmState=new SqlParameter("@State",SqlDbType.Int);
    prmState.Value=State;
    cmd.Parameters.Add(prmState); SqlParameter prmMoneyNum=new SqlParameter("@MoneyNum",SqlDbType.Int);
    prmMoneyNum.Value=MoneyNum;
    cmd.Parameters.Add(prmMoneyNum); SqlParameter prmClickNum=new SqlParameter("@ClickNum",SqlDbType.Int);
    prmClickNum.Value=ClickNum;
    cmd.Parameters.Add(prmClickNum); SqlParameter prmImage=new SqlParameter("@Image",SqlDbType.Image);
    prmImage.Value=Image;
    cmd.Parameters.Add(prmImage); SqlParameter prmCreateUser=new SqlParameter("@CreateUser",SqlDbType.Int);
    prmCreateUser.Value=CreateUser;
    cmd.Parameters.Add(prmCreateUser); SqlParameter prmCreateTime=new SqlParameter("@CreateTime",SqlDbType.DateTime);
    prmCreateTime.Value=Convert.ToDateTime(CreateTime);
    cmd.Parameters.Add(prmCreateTime); SqlParameter prmChangeUser=new SqlParameter("@ChangeUser",SqlDbType.Int);
    prmChangeUser.Value=ChangeUser;
    cmd.Parameters.Add(prmChangeUser); SqlParameter prmChangeTime=new SqlParameter("@ChangeTime",SqlDbType.DateTime);
    prmChangeTime.Value=Convert.ToDateTime(ChangeTime);
    cmd.Parameters.Add(prmChangeTime); SqlParameter prmTMovie_LinkAddID=new SqlParameter("@TMovie_LinkAddID",SqlDbType.VarChar);
    prmTMovie_LinkAddID.Value=TMovie_LinkAddID;
    cmd.Parameters.Add(prmTMovie_LinkAddID);////取到存储过程的返回值 SqlParameter p = new SqlParameter("@PKid", SqlDbType.Int);
    p.Direction = ParameterDirection.Output;
    cmd.Parameters.Add(p); cmd.Connection.Open();
    cmd.ExecuteNonQuery();
    id = Convert.ToInt32(p.Value);
    cmd.Connection.Close();
    return id;
    }
      

  7.   

    using System;
    using System.IO;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Collections;
    using System.Web;namespace MyCampus.Component
    {
    /// <summary>
    /// SqlResult 的摘要说明。
    /// 作者:刘志波
    /// 时间:2003-2-11
    /// 说明:
    ///     存储过程的返回值纪录类
    ///     DataSet : 表示返回的表
    ///     Output  : 存储过程的输出参数
    ///     Value   : 存储过程的返回值
    /// </summary>
    public class SqlResult
    {
    public int Value;
    public Hashtable Output;
    public DataSet dataSet; public SqlResult()
    {
    Value = 0;
    Output = new Hashtable();
    dataSet = new DataSet();
    }
    } /// <summary>
    /// SqlProcedure 的摘要说明。
    /// 作者:刘志波
    /// 时间:2003-2-11
    /// 说明:
    ///     用于调用数据库中的存储过程,返回一个DataSet、Output、Value的SqlResult类
    /// </summary>
    public class SqlProcedure
    {
    private string sp_name;
    private SqlConnection myConnection;
    private SqlCommand myCommand;
    private SqlParameter myParameter; public string ProcedureName
    {
    get{ return this.sp_name; }
    set{ this.sp_name = value; }
    } public SqlProcedure() : this("")
    {
    } public SqlProcedure(string sp_name)
    {
    this.ProcedureName = sp_name;
    }

    public SqlResult Call(params object[] parameters)
    {
    SqlResult result = new SqlResult(); myConnection  = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]); myCommand = new SqlCommand(this.ProcedureName, myConnection);
    myCommand.CommandType = CommandType.StoredProcedure; SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand); try
    {
    myConnection.Open(); GetProcedureParameter(parameters); myAdapter.Fill(result.dataSet, "Table"); GetOutputValue(result);
    }
    catch(Exception e)
    {
    throw e;
    }
    finally
    {
    myAdapter.Dispose();
    myCommand.Dispose();
    myConnection.Close();
    myConnection.Dispose();
    } return result;
    } private void GetProcedureParameter(params object[] parameters)
    {
    SqlCommand myCommand2 = new SqlCommand(); myCommand2.Connection = this.myConnection;
    myCommand2.CommandText = "select * from INFORMATION_SCHEMA.PARAMETERS where SPECIFIC_NAME='" +this.ProcedureName+ "' order by ORDINAL_POSITION"; SqlDataReader reader = null;
    try 
    {
    reader = myCommand2.ExecuteReader(); myParameter = new SqlParameter();
    myParameter.ParameterName = "@Value";
    myParameter.SqlDbType = SqlDbType.Int;
    myParameter.Direction = ParameterDirection.ReturnValue; myCommand.Parameters.Add(myParameter); int i = 0;
    while(reader.Read())
    {
    myParameter = new SqlParameter(); myParameter.ParameterName = reader["PARAMETER_NAME"].ToString();
    myParameter.Direction = reader["PARAMETER_MODE"].ToString()=="IN"?ParameterDirection.Input:ParameterDirection.Output; switch(reader["DATA_TYPE"].ToString())
    {
    case "bit" :
    if(myParameter.Direction == ParameterDirection.Input)
    myParameter.Value = (bool)parameters[i];
    myParameter.SqlDbType = SqlDbType.Bit;
    break; case "bigint" :
    if(myParameter.Direction == ParameterDirection.Input)
    myParameter.Value = (int)parameters[i];
    myParameter.SqlDbType = SqlDbType.BigInt;
    break; case "int" :
    if(myParameter.Direction == ParameterDirection.Input)
    myParameter.Value = (int)parameters[i];
    myParameter.SqlDbType = SqlDbType.Int;
    break;

    case "decimal" :
    if(myParameter.Direction == ParameterDirection.Input)
    myParameter.Value = (double)parameters[i];
    myParameter.SqlDbType = SqlDbType.Decimal;
    myParameter.Precision = (byte)reader["NUMERIC_PRECISION"];
    myParameter.Scale = (byte)reader["NUMERIC_SCALE"];
    break; case "nvarchar" :
    if(myParameter.Direction == ParameterDirection.Input)
    myParameter.Value = (string)parameters[i];
    myParameter.Size = (int)reader["CHARACTER_MAXIMUM_LENGTH"];
    myParameter.SqlDbType = SqlDbType.NVarChar;
    break; case "varchar" :
    if(myParameter.Direction == ParameterDirection.Input)
    myParameter.Value = (string)parameters[i];
    myParameter.Size = (int)reader["CHARACTER_MAXIMUM_LENGTH"];
    myParameter.SqlDbType = SqlDbType.VarChar;
    break; case "nchar" :
    if(myParameter.Direction == ParameterDirection.Input)
    myParameter.Value = (string)parameters[i];
    myParameter.Size = (int)reader["CHARACTER_MAXIMUM_LENGTH"];
    myParameter.SqlDbType = SqlDbType.NChar;
    break; case "char" :
    if(myParameter.Direction == ParameterDirection.Input)
    myParameter.Value = (string)parameters[i];
    myParameter.Size = (int)reader["CHARACTER_MAXIMUM_LENGTH"];
    myParameter.SqlDbType = SqlDbType.Char;
    break; case "ntext" :
    if(myParameter.Direction == ParameterDirection.Input)
    myParameter.Value = (string)parameters[i];
    myParameter.SqlDbType = SqlDbType.NText;
    break; case "text" :
    if(myParameter.Direction == ParameterDirection.Input)
    myParameter.Value = (string)parameters[i];
    myParameter.SqlDbType = SqlDbType.Text;
    break; case "datetime" :
    if(myParameter.Direction == ParameterDirection.Input)
    myParameter.Value = (DateTime)parameters[i];
    myParameter.SqlDbType = SqlDbType.DateTime;
    break; case "image" :
    if(myParameter.Direction == ParameterDirection.Input)
    {
    HttpPostedFile PostedFile = (HttpPostedFile)parameters[i]; Byte[] FileByteArray = new Byte[PostedFile.ContentLength];
    Stream StreamObject = PostedFile.InputStream;
    StreamObject.Read(FileByteArray,0,PostedFile.ContentLength); myParameter.Value = FileByteArray;
    } myParameter.SqlDbType = SqlDbType.Image;
    break; case "uniqueidentifier" :
    //myParameter.Value = (string)parameters[i];
    myParameter.SqlDbType = SqlDbType.UniqueIdentifier;
    break; default : break;
    }
    i++; myCommand.Parameters.Add(myParameter);
    }
    }
    catch(Exception e)
    {
    throw e;
    }
    finally
    {
    if(reader!=null) reader.Close();
    myCommand2.Dispose();
    }
    }
    private void GetOutputValue(SqlResult result)
    {
    result.Value = (int)myCommand.Parameters["@Value"].Value; foreach(SqlParameter parameter in myCommand.Parameters)
    {
    if(parameter.Direction == ParameterDirection.Output)
    {
    result.Output.Add(parameter.ParameterName, parameter.Value);
    }
    }
    }
    }
    }
      

  8.   

    这个是我看到的最好的代码。
    使用方法protected SqlProcedure procedure = new SqlProcedure("存储过程名");
    protected SqlResult result;
    result = procedure.Call(参数列表);
    自己使用一下就知道了,连上传文件到数据库都直接解决了