简体   繁体   English

存储过程 WHERE 子句错误(需要参数)

[英]Stored procedure WHERE clause error (expects parameter)

ALTER PROCEDURE [dbo].[sp_twa_report1]
    (@date1 as DATE,
     @date2 as DATE,
     @Filter1 as INT,
     @Kheadoption as NVARCHAR(10),
     @Kcodeoption as NVARCHAR(10),
     @Ktypeoption as NVARCHAR(10),
     @Shiftoption as INT)
AS
BEGIN
    SELECT
        wageentry.empno, wageentry.kdate, wageentry.kcode,
        empmain.paybookno, 
        kamjaricode.kdesc, kamjarihead.khead, kamjarihead.khdesc,
        wageentry.shiftno
    INTO
        #tmpTbl1
    FROM
        wageentry, empmain, kamjaricode, kamjarihead
    WHERE 
        wageentry.empno = empmain.empno
        AND wageentry.kcode = kamjaricode.kcode
        AND kamjaricode.khead = kamjarihead.khead
        AND wageentry.kdate >= @date1 AND wageentry.kdate <= @date2
        AND (wageentry.shiftno = CASE @Shiftoption 
                                     WHEN 1 THEN 1 
                                     WHEN 2 THEN 1 
                                     WHEN 3 THEN 2 
                                     ELSE 5 
                                 END
             OR wageentry.shiftno = CASE @Shiftoption 
                                        WHEN 1 THEN 2 
                                        WHEN 2 THEN 1 
                                        WHEN 3 THEN 2 
                                        ELSE 5 
                                    END
            OR wageentry.shiftno = CASE @Shiftoption
                                       WHEN 1 THEN 5  
                                       WHEN 2 THEN 1 
                                       WHEN 3 THEN 2 
                                       ELSE 5 
                                   END)
        AND ((@Kheadoption IS NULL) OR (kamjaricode.khead = @Kheadoption))
        AND ((@Kcodeoption IS NULL) OR (kamjaricode.kcode = @Kcodeoption))
        AND ((@Ktypeoption IS NULL) OR (kamjaricode.ktype = @Ktypeoption))

    -- More code here

End

The above stored procedure works fine from Management Studio, but when I run it from my Winforms app, I get an error:上面的存储过程在 Management Studio 中运行良好,但是当我从 Winforms 应用程序运行它时,出现错误:

Procedure or function 'sp_twa_report1' expects parameter '@Kheadoption', which was not supplied.过程或 function 'sp_twa_report1' 需要未提供的参数 '@Kheadoption'。

The parameters @Kheadoption, @Kcodeoption, @Ktypeoption are null as default. @Kheadoption, @Kcodeoption, @Ktypeoption参数默认为 null。 So from my understanding those lines of the query should be ignored.因此,据我了解,应该忽略查询的这些行。 Where am I going wrong?我哪里错了?

My Winforms code is:我的 Winforms 代码是:

commandText = "sp_twa_report1";

SqlCommand command = new SqlCommand(commandText, cs);
command.CommandType = CommandType.StoredProcedure;

command.Parameters.Add("@date1", SqlDbType.Date).Value = mySdate;
command.Parameters.Add("@date2", SqlDbType.Date).Value = myEdate;
command.Parameters.Add("@Filter1", SqlDbType.Int).Value = Filter1;
command.Parameters.Add("@Kheadoption",SqlDbType.NVarChar).Value = Kheadoption;
command.Parameters.Add("@Kcodeoption", SqlDbType.NVarChar).Value = Kcodeoption;
command.Parameters.Add("@Ktypeoption", SqlDbType.NVarChar).Value = Ktypeoption;
command.Parameters.Add("@Shiftoption", SqlDbType.Int).Value = myShiftno;
        
cs.Open();
SqlDataAdapter da = new SqlDataAdapter(command);
da.Fill(dt);
cs.Close();

The parameters @Kheadoption, @Kcodeoption, @Ktypeoption are null as default. @Kheadoption、@Kcodeoption、@Ktypeoption 参数默认为 null。 So from my understanding those lines of the query should be ignored.因此,据我了解,应该忽略查询的这些行。

Consider using DBNull instead of null when passing parameters for a stored procedure.为存储过程传递参数时,请考虑使用DBNull而不是null

Per MSDN : When you send a null parameter value to the server, you must specify DBNull, not null . 根据 MSDN :当您向服务器发送 null 参数值时,您必须指定 DBNull,而不是null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 存储过程期望未提供的参数 - Stored procedure expects parameter that was not supplied 尽管提供了参数,但存储过程需要参数 - Stored procedure expects parameter though parameter is provided 存储过程需要参数但实际提供了参数? - Stored procedure expects parameter but parameter is actually supplied? 存储过程或函数需要未提供的参数 - Stored procedure or function expects parameter which was not supplied 从C#代码调用存储过程时,出现SQL错误“过程或函数需要参数,但未提供” - Sql error “Procedure or function expects parameter , which was not supplied” when calling a stored procedure from c# code 存储的过程显示错误“过程或函数&#39;Dlete_Selected&#39;期望参数&#39;@id&#39;,未提供” - Stored procedure showing an error“ Procedure or function 'Dlete_Selected' expects parameter '@id', which was not supplied” SQL 服务器存储过程需要参数:从代码调用时出错 - SQL Server stored procedure expects parameter: error while calling from code SQL 2000:存储过程错误:过程或函数“名称”需要参数“ @param”(未提供) - SQL 2000: Stored Procedures Error : Procedure or Function 'name' expects parameter '@param', which was not supplied 即使提供了参数,SQL Server存储过程仍需要参数 - SQL Server stored procedure expects parameter even though the parameter is provided “过程或函数需要未提供的参数”错误 - 'Procedure or function expects parameter, which was not supplied' error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM