public string GetPriceLst(string StorageID,string MaterialID,string FactoryID,string inprice,string verif)
{
try
{
firstCommand = new OleDbCommand("M_GetPrice");
firstCommand.CommandType = CommandType.StoredProcedure;
firstCommand.Parameters.Clear();
OleDbParameter param = firstCommand.Parameters.Add("@StorageID", OleDbType.VarChar);
param.Value = StorageID;
param = firstCommand.Parameters.Add("@MaterialID",  OleDbType.VarChar);
param.Value = MaterialID;
param = firstCommand.Parameters.Add("@FactoryID", OleDbType.VarChar);
param.Value = FactoryID;
param = firstCommand.Parameters.Add("@inprice", OleDbType.VarChar);
param.Value = inprice;
param = firstCommand.Parameters.Add("@Verif", OleDbType.VarChar);
param.Value = verif;
param = firstCommand.Parameters.Add("@Strprice", OleDbType.VarChar,100);
param.Value = "";
param.Direction = ParameterDirection.Output;
OleDbConnection Conn =new OleDbConnection(ClsDbConnect.ConnectionString );
Conn.Open();
firstCommand.Connection = Conn;
firstCommand.ExecuteNonQuery();
return firstCommand.Parameters["@Strprice"].Value.ToString();
}
catch (System.Exception eFillDataSet) 
{
return eFillDataSet.Message;
}}

解决方案 »

  1.   

    这是我曾写过的一个存储过程:
    CREATE PROCEDURE vw_News_InsertNews
    @CategoryID int,
    @Title varchar(250),
    @Body text,
    @ReleaseDate datetime,
    @ExpireDate datetime,
    @NewsID int OUTPUT
    AS
             INSERT INTO News_News(CategoryID, Title, Body, ReleaseDate, ExpireDate)
    VALUES (@CategoryID, @Title, @Body, @ReleaseDate, @ExpireDate) SET @NewsID = @@IDENTITY IF @@ERROR > 0
    BEGIN
    RAISERROR ('Insert of News failed', 16, 1)
    RETURN 99
    END
             ELSE
                   BEGIN
                   RETURN 1
                   END返回:99 or 1
    下面代码方法可调用该存储过程,当然之前myConnection和parameters必须构造好
                      /// <summary>
    /// 这一方法有利于执行Insert,Update和Delete查询,返回一个数值条件代码,
    /// 来说明查询是成功还是失败。
    /// </summary>
    /// <param name="storedProcName">存储过程名</param>
    /// <param name="parameters">命令对象的参数</param>
    /// <param name="rowsAffected">执行存储过程所影响的行数</param>
    /// <returns>返回参数中ReturnValue的值</returns>
    protected int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected )
    {
    int result;
    myConnection.Open();
    SqlCommand command = BuildCommand( storedProcName, parameters );//这个函数是我自定义的,根据parameters构造一个命令对象并返回
    rowsAffected = command.ExecuteNonQuery();
    result = (int)command.Parameters["ReturnValue"].Value;
                               //result即为返回值
    myConnection.Close();
    return result;
    }
      

  2.   

    BuildCommand()如下:
    public SqlCommand BuildCommand(string storedProcName, IDataParameter[] parameters)
    {
          SqlCommand command = new SqlCommand( storedProcName, myConnection );
          command.CommandType = CommandType.StoredProcedure;      foreach (SqlParameter parameter in parameters)
    {
    command.Parameters.Add( parameter );
    }
         command.Parameters.Add( new SqlParameter ( "ReturnValue",SqlDbType.Int,4,
    ParameterDirection.ReturnValue,
    false,
    0,
    0,
    string.Empty,
    DataRowVersion.Default,
    null ));
          return command;
    }
      

  3.   

    // SQL参数输入参数
    public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, 
    object Value) 
    {
      return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
    }// SQL参数输出参数
    public SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size) 
    {
      return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null);
    }在存储过程中定义与这样:
    Create Proc ProcName(
      @aa varchar(20),
      @bb varchar(30) output
    )此时你就用
    MakeInParam( @aa, SqlDbTypes.Varchar, 20 );
    MakeOutParam( @bb, SqlDbTypes.Varchar, 30 );
    ...
      

  4.   

    初始值:myConnection = new SqlConnection("你的连接字符串");
    构造parameters并调用RunProcedure
    如下:
    public int InsertNews(int categoryID,string title,string body,DateTime releaseTime,
    DateTime ExpireTime)
    {
    int rowsAffected;
    SqlParameter[] parameters = {
    new SqlParameter("@CategoryID", SqlDbType.Int, 4),
    new SqlParameter("@Title", SqlDbType.VarChar, 30),
    new SqlParameter("@Body", SqlDbType.Text, 16),
                               new SqlParameter("@ReleaseDate",SqlDbType.DateTime,8),
                               new SqlParameter("@ExpireDate",SqlDbType.DateTime,8),
                               new SqlParameter("@NewsID",SqlDbType.Int,4) };
    parameters[0].Value = categoryID;
    parameters[1].Value = title;
    parameters[2].Value = body;
                               parameters[3].Value = releaseDate;
                               parameters[4].Value = ExpireDate;
                               parameters[5].Direction=ParameterDirection.Output;
    return RunProcedure("vw_News_InsertNews", parameters,out rowsAffected);
    }
    现写的,不知道有没有什么语法错误,好热。你还可以从parameters[5].Value中返回新插入的NewsID,并且还可以通过rowsAffected的值知道是否已经插入到数据库中