将SqlDataSource参数设置为null。

6
如何将传递给SqlDataSource的参数设置为null? 以下是我的代码,其中参数“@var1”从TextBox中设置。但是,如果未定义该值,则需要将“@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>
1个回答

8

添加ConvertEmptyStringToNullCancelSelectOnNullParameter属性。第一个属性将参数设置为空时,转换为 null;第二个属性允许查询运行(默认行为是不运行具有 null 参数的查询)。

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

感谢dbugger的建议。然而,通过设置这个,查询似乎从来没有执行过。在代码后面,我所做的是将inputA的值设置为空字符串。如果我在Sql Server Profiler中进行跟踪,查询就不会运行。但如果我将其设置为整数,则会正确运行。你有什么想法吗? - s303
@s303,忘记一个小细节,取消选择空参数属性。已编辑答案。 - dbugger
5
好的答案,除了我认为CancelSelectOnNullParameter="False"需要放在asp:SqlDataSource根节点上。 - mmcfly
就我个人而言,直到我在SqlDataSource标记中添加了EnableViewState="False"(如果我没记错的话是在MSDN论坛上找到的)才使它对我起作用。 - JuSTMOnIcAjUSTmONiCAJusTMoNICa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接