如何检查查询是否返回空值并将其添加到标签文本?

时间:2019-04-04 11:01:37

标签: sql-server vb.net

我正在Windows窗体(vb.net)中创建一个新应用程序,该应用程序会根据某些条件每天检查是否有任何记录添加到SQL数据库中。 问题是我无法弄清楚,如果查询返回空值,如何在标签框中显示一些消息。

Public Sub LoadUser2()
    Dim dt As New DataTable()
    Dim Con = New SqlConnection("Server=my server;database=My db;Integrated Security = True")
    Con.Open()
    Dim cmd As SqlCommand = New SqlCommand("select sum(Minutes)/60 as 'Ore Logate' from [dbo].[UserActivity]
                                            where team = 'Xaver' and username like '%alnecula%' and Convert(date,DateCreated) = Convert(date,getdate())", Con)
    Dim da As SqlDataAdapter = New SqlDataAdapter(cmd)
    da.SelectCommand = cmd
    da.Fill(dt)

    If dt.Rows.Count > 0 Then
        Txtgvlad.Text = "Logged Hours: " & dt.Rows(0)("Username").ToString
    Else
        Txtgvlad.Text = "You haven't logged any hours"
    End If
    Con.Close()
End Sub

因此,我想显示记录的小时数(如果有的话),否则显示字符串消息,通知用户没有记录的小时数。当前,如果结果为空,代码将显示Logged Hours:

2 个答案:

答案 0 :(得分:2)

您的实际代码存在的问题是,即使where条件不返回任何记录,您在表中仍然具有包含NULL的行。因此,您的测试始终是正确的。您只需在Sql Server Management Studio中复制查询并运行它即可进行测试。

相反,您可以使用ExecuteScalar来获取结果

Dim cmd As SqlCommand = New SqlCommand("select sum(Minutes)/60 as 'Ore Logate' 
                                        from [dbo].[UserActivity]
                                        where team = 'Xaver'  
                                          and username like '%alnecula%' 
                                          and Convert(date,DateCreated) = Convert(date,getdate())", Con)
Dim result = cmd.ExecuteScalar()
If Not IsDBNull(result) Then 
    Txtgvlad.Text = "Logged Hours: " & result.ToString
Else
    Txtgvlad.Text = "You haven't logged any hours"
End If

还要考虑到该查询可以返回零(但不能为NULL),并且在这种情况下IF条件为true。如果即使在返回零的情况下也要编写错误消息,则需要在If中添加一个AndAlso条件

If Not IsDBNull(result) AndAlso result.ToString <> "0" Then 

答案 1 :(得分:1)

解决这个问题的一种好方法是使用sqldatareader。因此,基本上,您通常会像平常一样执行Sp,但是使用阅读器执行它,然后在if语句中使用.hasrows。例如您提供的内容

Public Sub LoadUser2()

    Dim Con = New SqlConnection("Server=my server;database=My db;Integrated Security = True")
    Con.Open()
    Dim cmd As new SqlCommand = New SqlCommand("select sum(Minutes)/60 as 'Ore Logate' from [dbo].[UserActivity]
                                        where team = 'Xaver' and username like '%alnecula%' and Convert(date,DateCreated) = Convert(date,getdate())", Con)


   using RDR = cmd.executeReader
    if RDR.has rows
       IF RDR("YourColumnName").tostring() = "" then
          Txtgvlad.Text = "You haven't logged any hours"
       else
        Txtgvlad.Text = "Logged Hours: " & RDR("Username").ToString

    else
        Txtgvlad.Text = "You haven't logged any hours"
    end if
  end using


    Con.Close()
End Sub

您的原始行可能仍在返回而有行,可能是因为它返回的是一行,而只是空行。