我正在使用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中检查了同样的问题,但提交者缺少命令类型声明。
在指出我出错的地方时,感谢任何帮助。
答案 0 :(得分:4)
您应该将@RequestID
更改为@TARKey
。因为您的存储过程需要具有该名称的参数。
答案 1 :(得分:1)
您可以使用SqlCommandBuilder.DeriveParameters安全地执行存储过程而无需直接指定名称。这将从服务器检索参数并为您创建SQLParameter集合。
SqlCommand cmd = new SqlCommand("SDDeleteTAR", con);
SqlCommandBuilder.DeriveParameters(cmd);
cmd.Parameters[0].Value = rid;