【问题标题】:Null Table adapter value with if then statement带有 if then 语句的空表适配器值
【发布时间】:2013-02-28 20:32:08
【问题描述】:

我有一个 VB.Net 程序,用于检查上周是否使用了特定终端。我想使用 if then 语句将结果发送给我。如果 tableadapter 是空的(NULL),那么我希望它在程序中执行一些东西......现在我有:

Me.1TableAdapter.Fill(Me.SwiperCheck.1, DTstartdate, TodayEnd)

If (Me.SwiperCheck.1.Count = 0) Then

msgbox ("It Worked")

这是我的数据集查询:

SELECT        CASE WHEN COUNT(sTerminal) = 0 THEN NULL ELSE COUNT(sTerminal) END AS terminal
FROM            Swipe
WHERE        (dtCreated BETWEEN @startdate AND @enddate) AND (sTerminal = 'Swiper 1')

但是它不起作用,我知道输出为“Null”如果输出不为 null,则程序正常工作。

【问题讨论】:

    标签: c# sql vb.net sql-server-2005 dataset


    【解决方案1】:

    如果您希望它在计数为零时不返回任何记录,那么您必须执行以下操作:

    SELECT        COUNT(sTerminal) terminal
    FROM            Swipe
    WHERE        (dtCreated BETWEEN @startdate AND @enddate) AND (sTerminal = 'Swiper 1')
    HAVING COUNT(sTerminal) > 0
    

    这应该使您的原始 IF 正常工作。

    【讨论】:

      【解决方案2】:

      尝试将 0 更改为 dbnull 或

      me.swipercheck.1.count is nothing
      

      【讨论】:

      • “Is”运算符不接受“整数”的操作数。操作数必须是引用类型或可为空的类型。我也尝试过 DBnull 并且 dbnull 返回相同的错误。
      【解决方案3】:

      您的查询,如所写,将始终只有一行。您的条件是检查表上的行数。所以“如果 (1=0) 那么”​​ ....

      你真正需要检查的是:

      If (Me.SwiperCheck.1.Item(0) Is DBNull.Value) Then
      

      【讨论】:

      • @Shmewnix 您是否尝试调试您的代码?在if 语句上设置一个断点并将Me.SwiperCheck.1.Item(0) 放在Watch 窗口中。看看里面有什么。
      【解决方案4】:

      我认为您的查询返回的 NULL 给您带来了麻烦。您可以通过删除 CASE 语句并返回 Count(sTerminal) 来简化查询。那么你就有了一致的返回值:

      SELECT    COUNT(sTerminal) AS terminal
      FROM            Swipe
      WHERE        (dtCreated BETWEEN @startdate AND @enddate) AND (sTerminal = 'Swiper 1')
      

      那么我会遵循@Bill 的建议,因为您总是返回一行:

      If (Me.SwiperCheck.1.Item(0) = 0 ) Then
      

      请参阅这篇文章,了解您的“可空”错误MSDN-Nullable Value

      【讨论】:

      • 错误 1 ​​运算符 '=' 没有为类型 Swipercheck.1Row' 和 'Integer' 定义
      • @Shmewnix ...如果不查看该类的代码,很难知道这是什么原因。但是,这个想法是,您可以从查询中找到一个返回值并对其应用逻辑。
      【解决方案5】:

      尝试 IsDbNull(me.swipercheck.1.count) = false 代替? (抱歉,由于rep,我似乎还不能在帖子上写小cmets。

      【讨论】:

        猜你喜欢
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        相关资源
        最近更新 更多