命名的SqlParameters无法识别

Cyb*_*ist 2 c# stored-procedures sql-server-2012

我正在尝试从C#程序访问存储过程,并且令人难以置信,我得到了

过程或函数'procedure_name'需要参数'@agency',这是未提供的.

除了它提供:

SqlCommand cmd = new SqlCommand(sp);
cmd.Connection = conn;

SqlParameter parm = new SqlParameter();
parm.ParameterName = "@agency";
parm.SqlDbType = SqlDbType.VarChar;
parm.Size = 3;
parm.Value = txtAgency.Text.Trim();
cmd.Parameters.Add(parm);
Run Code Online (Sandbox Code Playgroud)

存储过程如下所示:

CREATE PROCEDURE [dbo].[procedure_name]
(
    @agency varchar(3)
    , @subagency varchar(1)
    , @start datetime
    , @end datetime
)
AS
Run Code Online (Sandbox Code Playgroud)

我已经做了多年和几年类似的存储过程调用,没有出现完全有效和正确的调用问题.顺便说一句,从Sql Management Studio执行时,此存储过程工作正常.

请注意,我已经更改了参数的顺序,并为第一个参数获得相同的响应,无论哪个参数.

当我在Visual Studio中的调试器下运行它时,我确认parms在预期的位置具有必要的值.

mar*_*c_s 5

你需要告诉SqlCommand它正在处理一个存储过程 - 像这样:

SqlCommand cmd = new SqlCommand(sp);
-- add this line
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;
Run Code Online (Sandbox Code Playgroud)