c#存储过程启动:过程或函数需要参数,该参数未提供

时间:2016-07-19 12:28:03

标签: c# .net sql-server stored-procedures

我已经有了这个存储过程:

ALTER PROCEDURE [dbo].[sp_XNet_Backup]
    @backupPath NVARCHAR(4000) = null,
    @rc INT OUT
AS
BEGIN

    SET @rc = 0
    ...
    ...

以这种方式从c#项目启动:

SqlParameter[] paramters = new SqlParameter[2];
byte i = 0;

string sp = "dbo.sp_XNet_Backup";

using (SqlConnection conn = DBManager.CreateADOConnMaster())
{
    conn.Open();

    SqlCommand cmd = new SqlCommand(sp, conn);
    cmd.CommandType = CommandType.StoredProcedure;
    paramters[i++] = new SqlParameter("@backupPath", completePath);
    paramters[i] = new SqlParameter("@rc", SqlDbType.Int);
    paramters[i].Direction = ParameterDirection.InputOutput;

    foreach (SqlParameter param in paramters)
        cmd.Parameters.Add(param);

    cmd.ExecuteNonQuery();
    ...
    ...

但它给了我这个错误:

  

程序或功能' sp_XNet_Backup'期望参数' @ rc',哪个   没有提供。

2 个答案:

答案 0 :(得分:0)

而不是ParameterDirection.InputOutput,请使用ParameterDirection.Output

cmd.Parameters.Add("@rc", SqlDbType.Int).Direction = ParameterDirection.Output;
try
{
    if (cmd.Connection.State == ConnectionState.Closed)
    {
        cmd.Connection.Open();
    }
    cmd.ExecuteNonQuery();
    result = Convert.ToInt32(cmd.Parameters["@rc"].Value);    
}
catch (Exception)
{

}
finally
{                
    cmd.Connection.Close();
    Response.Write(result); 
}

答案 1 :(得分:0)

我相信这是因为在调用cmd.ExecuteNonQuery()之前没有分配参数值;

请添加值并尝试,希望这有帮助

foreach (SqlParameter param in paramters)
   {
    param.Value = //somevalue
    cmd.Parameters.Add(param);
    }