Foxtable(狐表)用户栏目专家坐堂 → 对NULL的处理


  共有2062人关注过本帖树形打印复制链接

主题:对NULL的处理

帅哥哟,离线,有人找我吗?
huhu
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1182 积分:8225 威望:0 精华:0 注册:2015/3/30 10:44:00
对NULL的处理  发帖心情 Post By:2017/2/8 16:04:00 [只看该作者]

<WebMethod()>
    Public Function GetState1Refine(ByVal ddh As String, ByVal ddhh As String, ByVal wlbm As String, ByVal lhbbh As String, ByVal rjbb As String) As String
        Dim cnStr As String = "Data Source=172.16.11.201;Initial Catalog=songjiang;Integrated Security=False;User ID=sa;Password=bdcom103liujy;"
        Dim cn As New SqlClient.SqlConnection(cnStr)
        cn.Open()
        Dim adapter As New SqlClient.SqlDataAdapter("s elect * from [可用数量表]  where 物料编码 = '" & wlbm & "' and 订单行号 = '" & ddhh & "' and 软件版本 = '" & rjbb & "'  and 两化表编号 = '" & lhbbh & "' and 订单号 = '" & ddh & "'", cn)
        Dim dt As New DataTable
        adapter.Fill(dt)
        cn.Close()

当后台数据表的值为NULL。如附件后台NULL
查询界面写NULL或者为空,都不行。如附件NULL。这是怎么回事?

图片点击可在新窗口打开查看此主题相关图片如下:null.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:后台null.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/2/8 16:08:00 [只看该作者]

 改成 where 物料名 is null and 订单号 is null

 回到顶部
帅哥哟,离线,有人找我吗?
huhu
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1182 积分:8225 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2017/2/8 16:11:00 [只看该作者]

这是给别人提供接口。别人又不知道两化表编号或者订单号为NULL。
怎么变通呢

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/2/8 16:13:00 [只看该作者]

别人留空,你就不查值;别人填null,你就对应改成 is null 啊

 

参考前几天那种写法,合成条件。


 回到顶部
帅哥哟,离线,有人找我吗?
huhu
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1182 积分:8225 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2017/2/8 17:31:00 [只看该作者]

恩。已经做好了。
但有一种情况。
Dim filter1 As String = "订单号 <> '" & ddh & "' and 订单行号 <> '" & ddhh & "'"
加如果ddh=1.但后台订单号的值为NULL
NULL<>'1'---这个成立吗?

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/2/8 17:48:00 [只看该作者]

 null值和值比较得到的结构,都是false。所以无法成立。

 

 你需要这样比较

 

(订单 is null Or 订单 <> '1')


 回到顶部
帅哥哟,离线,有人找我吗?
huhu
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1182 积分:8225 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2017/2/8 18:20:00 [只看该作者]

 <WebMethod()>
    Public Function GetState2Refine(ByVal ddh As String, ByVal ddhh As String, ByVal wlbm As String, ByVal rjbb As String, ByVal lhbbh As String) As String
        Dim cnStr As String = "Data Source=172.16.11.201;Initial Catalog=songjiang;Integrated Security=False;User ID=sa;Password=bdcom103liujy;"
        Dim cn As New SqlClient.SqlConnection(cnStr)
        cn.Open()
        Dim adapter As SqlClient.SqlDataAdapter
        Dim strSql As String = ""

        If ddh = "" Or ddhh = "" Or ddh = "null" Or ddhh = "null" Then
            Dim state1 As String
            state1 = "订单号或者订单行号不能为空"
            Return state1

            'adapter = New SqlClient.SqlDataAdapter("s elect * from [可用数量表]  where  物料编码 = '" & wlbm & "' and 软件版本 = '" & rjbb & "' and 两化表编号 like '% " & lhbbh & "%'", cn)
        Else
            Dim filter As String = "1=1"
            If wlbm = "" Then
                filter &= " and 1=1"
            ElseIf wlbm = "null" Then
                filter &= " and 物料编码 is null"
            Else
                filter &= " and 物料编码 = '" & wlbm & "'"
            End If

            If lhbbh = "" Then
                filter &= " and 1=1"
            ElseIf lhbbh = "null" Then
                filter &= " and 两化表编号 is null"
            Else
                filter &= " and 两化表编号 like '%" & lhbbh & "%'"
            End If

            If rjbb = "" Then
                filter &= " and 1=1"
            ElseIf rjbb = "null" Then
                filter &= " and 软件版本 is null"
            Else
                filter &= " and 软件版本 = '" & rjbb & "'"
            End If
            Dim filter1 As String = "订单号 is null or 订单行号 is null  or 订单号 <> '" & ddh & "' or 订单行号 <> '" & ddhh & "' and "
            MsgBox(filter1)

图片点击可在新窗口打开查看此主题相关图片如下:filter1.png
图片点击可在新窗口打开查看

            strSql = "s elect * from [可用数量表]  where " & filter1 & filter
            MsgBox(strSql)

图片点击可在新窗口打开查看此主题相关图片如下:strsql.png
图片点击可在新窗口打开查看

            
            adapter = New SqlClient.SqlDataAdapter(strSql, cn)
            Dim dt As New DataTable
            adapter.Fill(dt)
            cn.Close()

报下面的错误参数“Expression”不是有效值。这不是合成s elect不对?
System.ArgumentException: 参数“Expression”不是有效值。
   在 Microsoft.VisualBasic.Strings.Format(Object Expression, String Style)
   在 WebApplication4.OrderQueryBLL.GetWareRootWork(DataRow dr1) 位置 F:\VS\WebApplicationN\WebApplication4\OrderQueryBLL.vb:行号 51
   在 WebApplication4.OrderQueryBLL.ConvertToJsonObject(DataTable dataTable) 位置 F:\VS\WebApplicationN\WebApplication4\OrderQueryBLL.vb:行号 31
   在 WebApplication4.WebService1.GetState2Refine(String ddh, String ddhh, String wlbm, String rjbb, String lhbbh) 位置 F:\VS\WebApplicationN\WebApplication4\WebService1.asmx.vb:行号 167

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/2/8 18:36:00 [只看该作者]

Dim filter As String = "1=1"
ElseIf wlbm = "null" Then
    filter &= " and 物料编码 is null"
ElseIf wlbm > ""
    filter &= " and 物料编码 = '" & wlbm & "'"
End If


If lhbbh = "null" Then
    filter &= " and 两化表编号 is null"
Else If lhbbh > "" Then
    filter &= " and 两化表编号 like '%" & lhbbh & "%'"
End If

If rjbb = "null" Then
    filter &= " and 软件版本 is null"
ElseIf rjbb = "" Then
    filter &= " and 软件版本 = '" & rjbb & "'"
End If
Dim filter1 As String = "(订单号 is null or 订单号 <> '" & ddh & "') and (订单行号 <> '" & ddhh & "') and "
MsgBox(filter1)

strSql = "select * from [可用数量表]  where " & filter1 & filter
MsgBox(strSql)


 回到顶部
帅哥哟,离线,有人找我吗?
huhu
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1182 积分:8225 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2017/2/9 11:14:00 [只看该作者]

Dim filter As String = "1=1"
            If wlbm = "null" Then
                filter &= " and 物料编码 is null"
            ElseIf wlbm > "" Then
                filter &= " and 物料编码 = '" & wlbm & "'"
            End If

            If lhbbh = "null" Then
                filter &= " and 两化表编号 is null"
            ElseIf lhbbh > "" Then
                filter &= " and 两化表编号 like '%" & lhbbh & "%'"
            End If

            If rjbb = "null" Then
                filter &= " and 软件版本 is null"
            ElseIf rjbb > "" Then
                filter &= " and 软件版本 = '" & rjbb & "'"
            End If
            Dim filter1 As String = "(订单号 is null or 订单号 <> '" & ddh & "') and (订单行号 is null or 订单行号 <> '" & ddhh & "') and "

            strSql = "s elect * from [可用数量表]  where " & filter1 & filter
            MsgBox(strSql)

图片点击可在新窗口打开查看此主题相关图片如下:ex.png
图片点击可在新窗口打开查看

还是回报这个错
System.ArgumentException: 参数“Expression”不是有效值。

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/2/9 11:16:00 [只看该作者]

  条件没有错,你其它代码有问题。

[此贴子已经被作者于2017/2/9 11:16:44编辑过]

 回到顶部
总数 12 1 2 下一页