【问题标题】:Set SqlDataSource parameter to null将 SqlDataSource 参数设置为 null
【发布时间】:2016-02-29 19:11:42
【问题描述】:

如何将传递给 SqlDataSource 的参数设置为 null?我有下面的代码,其中参数“@var1”是从文本框设置的。但是,如果未定义该值,我需要将“@var1”设置为 null,以便 coalesce 返回 true。

有没有办法做到这一点,还是我做错了?

我也尝试过设置DefaultValue="null"dsABC.SelectParameters["@var1"]=null,它们都会导致“输入字符串格式不正确”错误。

   <asp:SqlDataSource ID="dsABC" runat="server" ConnectionString="<%$ ConnectionStrings:abc123 %>" 
   SelectCommand=" SELECT   col1, col2, col3                        
                   FROM table1 as T1
                   WHERE   COALESCE(@var1, T.ID) = T.ID">
     <SelectParameters>
        <asp:ControlParameter Name="var1" ControlID="inputA" PropertyName="Value" DefaultValue="0" Type="Int16" />
     </SelectParameters>  
   </asp:SqlDataSource>

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    添加 ConvertEmptyStringToNullCancelSelectOnNullParameter 属性。第一个在为空时将参数设置为 null,第二个让查询运行(默认行为是不运行带有 null 参数的查询)。

           <SelectParameters>
                <asp:ControlParameter Name="var1" ControlID="inputA" PropertyName="Value" DefaultValue="0" Type="Int16"
     ConvertEmptyStringToNull="true" 
    CancelSelectOnNullParameter="false"  />
             </SelectParameters>  
    

    【讨论】:

    • 感谢提示调试器。但是,通过设置此查询似乎永远不会执行。我在后面的代码中所做的是将 inputA 的值设置为 string.empty。如果我在 Sql Server Profiler 中进行跟踪,则查询永远不会运行。如果我将其设置为整数,它将正确运行。有什么想法吗?
    • @s303,忘记了一点,CancelSelectOnNullParameter 属性。编辑了答案。
    • 很好的答案,除了我认为 CancelSelectOnNullParameter="False" 需要在 根节点中上升。
    猜你喜欢
    • 2012-02-05
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    相关资源
    最近更新 更多