【问题标题】:How to short curcit null parameter (SQL)如何短路空参数(SQL)
【发布时间】:2010-08-18 15:22:30
【问题描述】:

你好朋友,我有以下查询,这违背了目的。

一天前,我要求对电路进行排序的建议,因为我得到了使用的建议
(@firstYrPercent is null OR first_year_percent>=@firstYrPercent) 像这样拒绝空参数,但是今天当我运行实际查询时,我认为上面提到的想法是没有用的。

我正在为所有那些为 null 的参数获取 sql 异常,并且这些错误的要求值是这个 Sql 异常被捕获:

“参数化查询'(@courseId int,@passoutYear int,@currentBacklog int,@sex int,@eG' 需要参数@currentDegeePercentage,但未提供。"

这是查询,请给我建议一个替代方案:

string cmd = @"SELECT * FROM [tbl_students] WHERE course_id=@courseId 
          AND  branch_id IN(" + branchId + @") 
          AND (@firstYrPercent is null OR first_year_percent>=@firstYrPercent)
          AND (@secondYrpercent is null OR second_year_percent>=@secondYrPercent)
          AND (@thirdYrPercent is null OR third_year_percent>=@thirdYrPercent)
          AND (@finalYearpercent is null OR final_year_percent>=@finalYearpercent)
          AND (@currentDegeePercentage is null OR current_degree_percent>=@currentDegeePercentage)
          AND (@passoutYear is null OR passing_year>=@passoutYear) 
          AND (@currentBacklog is null OR current_backlog<=@currentBacklog)
          AND gender=@sex 
          AND (@eGap is null OR gapin_education<=@eGap)
          AND (@highSchoolPercentge is null OR highschool_percentage>=@highSchoolPercentge)
          AND (@higherSchoolPercentage is null OR ssc_percentage>=@higherSchoolPercentage)
          AND (@grauationPercentage is null OR graduation_percentage>=@grauationPercentage)
          AND (@diplomaPercentage is null OR diploma_percentage>=@diplomaPercentage)
          AND (@noOfAtkt is null OR number_of_ATKT<=@noOfAtkt)
          AND (@date is null OR DOB>=@date)";

【问题讨论】:

    标签: c# sql


    【解决方案1】:

    您需要确保在您正在执行的命令上定义 @currentDegeePercentage 参数 - 具体来说,如果您想将该参数作为 null 传递,请确保将参数添加到命令中,其值为:DBNull.Value .

    如果您不将参数添加到 Command.Parameters 集合,或者添加它但将值设置为 null(而不是 DBNull.Value),那么您将收到您所看到的错误。

    【讨论】:

    • 首先它不是一个存储过程,无论您在上面提出什么要求,我都已经完成了所有这些,但它仍然给出了错误。它只对那些具有空值的参数给出错误。而当我提供所有参数时,根本就没有错误。请告诉我错误是什么?
    • @NoviceToDotNet - 它不一定是存储过程,我没有提到存储过程。关键是,如果你构建任何形式的 SQL 语句来执行,其中包含参数(无论是存储过程还是像这样的临时 SQL 语句) - 你必须确保在正在执行的命令上定义所有这些参数,否则你得到你看到的错误。例外情况是当您使用存储过程时,您可以使用默认/可选参数。如果您将代码发布在从 .NET 执行 SQL 的位置,那将有所帮助。
    【解决方案2】:

    问题不在于参数是null,而是缺少参数。检查拼写错误(它是“度数”,而不是“度数”[原文如此])。

    【讨论】:

    • 不,在我的情况下,它是“degee”而不是程度。并且已经测试了它的所有值,当我提供的所有参数都没有空值时它确实有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2013-06-06
    • 2010-09-27
    • 2021-08-06
    • 2023-03-05
    • 2016-03-29
    相关资源
    最近更新 更多