使用if then语句的空表适配器值

时间:2013-03-13 03:03:35

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

我有一个VB.Net程序,用于检查上周是否使用过特定终端。我想使用if then语句向我发送结果。如果tableadapter为Empty(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,则程序正常工作。

5 个答案:

答案 0 :(得分:1)

如果你希望它在计数为零时不返回任何记录,那么你必须做这样的事情:

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

这应该使你的orignial IF正常工作。

答案 1 :(得分:0)

尝试将0更改为dbnull或

me.swipercheck.1.count is nothing

答案 2 :(得分:0)

您所写的查询将始终有一行。您的条件是检查表格上的行数。所以“If(1 = 0)然后”....

您真正需要检查的是:

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

答案 3 :(得分: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

答案 4 :(得分:0)

尝试IsDbNull(me.swipercheck.1.count)= false? (对不起,由于代表,我似乎无法撰写关于帖子的小评论。)