首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用空值使用querystring参数的SELECT查询

使用空值使用querystring参数的SELECT查询
EN

Stack Overflow用户
提问于 2013-05-15 21:20:23
回答 1查看 1.9K关注 0票数 0

尊敬的各位会员,大家好!

目前,我在asp.net中使用以下SELECT命令根据查询字符串值填充网格视图:

代码语言:javascript
复制
 SelectCommand="SELECT ID, Date, Train, I_R, Dir_Ind, Detn, Rly, DiV, Loco, Shed, locoClass, loco_type FROM PunctualityMain WHERE Date >= @strdt AND Date <= @enddt AND ([Rly] = @rly OR @rly IS NULL) AND ([shed] = @shed OR @shed IS NULL) Order by Date ASC">

 <SelectParameters>
 <asp:QueryStringParameter Name="strdt" QueryStringField="strdt" Type="DateTime" />
 <asp:QueryStringParameter Name="enddt" QueryStringField="enddt" Type="DateTime" />
 <asp:QueryStringParameter Name="rly" QueryStringField="rly" Type="string" />
 <asp:QueryStringParameter Name="shed" QueryStringField="shed" Type="string" />
 </SelectParameters>

它在两个值为null的情况下也可以正常工作:

代码语言:javascript
复制
  http://elocos.railnet.gov.in/Punctuality/Punctualitydetail.aspx?strdt=5/1/2013&enddt=5/14/2013&rly=&shed=

现在我想对Gridview使用相同的删除、插入和更新命令,如下所示:

代码语言:javascript
复制
    DeleteCommand="DELETE FROM [PunctualityMain] WHERE [ID] = @ID" 
    InsertCommand="INSERT INTO [PunctualityMain] ([Date], [Train], [Dir_Ind], [Detn], [Rly], [DiV], [Loco], [Shed], [locoClass], [loco_type]) VALUES (@Date, @Train, @Dir_Ind, @Detn, @Rly, @DiV, @Loco, @Shed, @locoClass, @loco_type)" 
    SelectCommand="SELECT * FROM [PunctualityMain] WHERE (([Date] &gt;= @strdt) AND ([Date] &lt;= @enddt) AND ([Shed] = @shed OR @shed IS NULL) AND ([Rly] = @rly OR @rly IS NULL)) ORDER BY [Date]"
    UpdateCommand="UPDATE [PunctualityMain] SET [Date] = @Date, [Train] = @Train, [Dir_Ind] = @Dir_Ind, [Detn] = @Detn, [Rly] = @Rly, [DiV] = @DiV, [Loco] = @Loco, [Shed] = @Shed, [locoClass] = @locoClass, [loco_type] = @loco_type WHERE [ID] = @ID">
    <DeleteParameters>
        <asp:Parameter Name="ID" Type="Int32" />
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="Date" Type="DateTime" />
        <asp:Parameter Name="Train" Type="Int32" />
        <asp:Parameter Name="Dir_Ind" Type="String" />
        <asp:Parameter Name="Detn" Type="Int32" />
        <asp:Parameter Name="Rly" Type="String" />
        <asp:Parameter Name="DiV" Type="String" />
        <asp:Parameter Name="Loco" Type="String" />
        <asp:Parameter Name="Shed" Type="String" />
        <asp:Parameter Name="locoClass" Type="String" />
        <asp:Parameter Name="loco_type" Type="String" />
       </InsertParameters>
    <SelectParameters>
   <asp:QueryStringParameter Name="strdt" QueryStringField="strdt" Type="DateTime" />
   <asp:QueryStringParameter Name="enddt" QueryStringField="enddt" Type="DateTime" />
   <asp:QueryStringParameter Name="rly" QueryStringField="rly" Type="string" />
   <asp:QueryStringParameter Name="shed" QueryStringField="shed" Type="string" />
   </SelectParameters>
    <UpdateParameters>
        <asp:Parameter Name="Date" Type="DateTime" />
        <asp:Parameter Name="Train" Type="Int32" />
        <asp:Parameter Name="Dir_Ind" Type="String" />
        <asp:Parameter Name="Detn" Type="Int32" />
        <asp:Parameter Name="Rly" Type="String" />
        <asp:Parameter Name="DiV" Type="String" />
        <asp:Parameter Name="Loco" Type="String" />
        <asp:Parameter Name="Shed" Type="String" />
        <asp:Parameter Name="locoClass" Type="String" />
        <asp:Parameter Name="loco_type" Type="String" />
        <asp:Parameter Name="ID" Type="Int32" />
    </UpdateParameters>

为什么上面的SELECT命令不能处理rly & shed的空值?但是,对于所有四个查询字符串值,它的工作方式如下所示

代码语言:javascript
复制
  http://elocos.railnet.gov.in/Punctuality/Punctualitydetail.aspx?strdt=5/1/2013&enddt=5/14/2013&rly=CR&shed=KYN

请为该问题提出任何解决方案,以便它也可以使用此字符串(空字符串的值)

代码语言:javascript
复制
  http://elocos.railnet.gov.in/Punctuality/Punctualitydetail.aspx?strdt=5/1/2013&enddt=5/14/2013&rly=&shed=
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-15 22:55:44

因为您从空的querystring value =/= null获取空值

为了让它正常工作,你应该手动设置空值。我至少可以向你推荐两种方式:

1)在codebehind中:

代码语言:javascript
复制
string rly = Request.QueryString["rly"];
if (rly == "")
rly = null;

然后使用它。

2)在SQL命令中:

代码语言:javascript
复制
Rly=NullIf('@rly','')

但我不确定第二个是否会像这样工作,如果它不能工作,那么你可以尝试像这样解决它:

string empt = "";背后的代码

SQL命令Rly=NullIf('@rly','+empt+')

或者你可以采用其他方法,重点是验证它"rly“query是否为"",如果是,则将其设置为null,否则就让它保持原样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16566161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档