0

我有一个 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')

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

4

5 回答 5

1

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

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

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

于 2013-03-18T18:13:07.857 回答
0

尝试将 0 更改为 dbnull 或

me.swipercheck.1.count is nothing
于 2013-03-13T03:32:31.180 回答
0

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

你真正需要检查的是:

If (Me.SwiperCheck.1.Item(0) Is DBNull.Value) Then
于 2013-03-15T19:13:06.210 回答
0

我认为您的查询返回的 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的文章

于 2013-03-15T19:24:54.657 回答
0

尝试 IsDbNull(me.swipercheck.1.count) = false 代替?(抱歉,由于代表,我似乎无法在帖子上写小评论)。

于 2013-03-19T15:21:34.500 回答