存储过程需要参数虽然提供了参数

时间:2017-03-29 00:46:39

标签: c# sql asp.net ado.net

我正在使用VS 2015和SQL Server 2016.

在我的C#代码中,我正在分配我的存储过程所期望的参数,但是因为我的存储过程需要一个参数而出现错误。

我的存储过程:

CREATE PROCEDURE [dbo].[SDDeleteTAR]
    @TARKey int
AS
BEGIN
    DELETE technical_assistance_requests  
    WHERE request_id = @TARKey
END

我的C#代码:

Label id = (Label)e.Item.FindControl("REQUEST_ID");
var x = id.Text;
int rid = Convert.ToInt32(x);

string cs = ConfigurationManager.AppSettings.Get("connectionString").ToString();

using (SqlConnection con = new SqlConnection(cs))
{
    SqlCommand cmd = new SqlCommand("SDDeleteTAR", con);
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.AddWithValue("@RequestID", rid); 

    con.Open();
    cmd.ExecuteNonQuery(); 
}

当我运行时,我收到此错误:

  

过程或函数'SDDeleteTAR'需要参数'@TARKey',这是未提供的。

我传递了所需的参数并将命令类型作为CommandType.StoredProcedure执行,但我无法解决此问题。

我还在StackOverflow here中检查了同样的问题,但提交者缺少命令类型声明。

在指出我出错的地方时,感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

您应该将@RequestID更改为@TARKey。因为您的存储过程需要具有该名称的参数。

答案 1 :(得分:1)

您可以使用SqlCommandBuilder.DeriveParameters安全地执行存储过程而无需直接指定名称。这将从服务器检索参数并为您创建SQLParameter集合。

SqlCommand cmd = new SqlCommand("SDDeleteTAR", con);
SqlCommandBuilder.DeriveParameters(cmd);
cmd.Parameters[0].Value = rid;