加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 如何在VB.net中处理SqlDataReader null值

发布时间:2020-12-16 07:35:15 所属栏目:asp.Net 来源:网络整理
导读:我有以下代码执行查询并返回结果.但是,我环顾四周并找到一些例子来处理空值,但是我收到一个错误:“当没有数据存在时无效的读取尝试.”我也得到了错误:“从类型’DBNull’转换为’Decimal’类型无效.” 有人可以帮我解决这个代码,以防止空值崩溃我的程序?
我有以下代码执行查询并返回结果.但是,我环顾四周并找到一些例子来处理空值,但是我收到一个错误:“当没有数据存在时无效的读取尝试.”我也得到了错误:“从类型’DBNull’转换为’Decimal’类型无效.”

有人可以帮我解决这个代码,以防止空值崩溃我的程序?

Private Sub EFFICIENCY_STACKRANK_YTD(ByVal EMPLOYEE As String)

    Dim queryString As String = "SELECT " & _
    " (SELECT CAST(SUM(TARGET_SECONDS) AS DECIMAL)/ CAST(SUM(ROUTE_SECONDS) AS DECIMAL) FROM dbo.APE_BUSDRIVER_MAIN WITH(NOLOCK) WHERE APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND EMPLOYEE_NAME = '" & EMPLOYEE & "' AND YEAR_TIME = '" & cbYear.Text & "' AND ACTIVE = 1) AS RESULT1" & _
    " FROM dbo.APE_BUSDRIVER_MAIN "


    Using connection As New SqlConnection(SQLConnectionStr)
        Dim command As New SqlCommand(queryString,connection)
        connection.Open()
        Dim reader As SqlDataReader = command.ExecuteReader()

        If reader.Read Then
            RESULT1 = reader("RESULT1")
        Else
            RESULT1 = 0
        End If

    End Using
End Sub

解决方法

你打开了读卡器,但没有要求它实际读取任何内容.

在此之后:

Dim reader As SqlDataReader = command.ExecuteReader()

If reader.Read() Then

并将结果读数包装到此if语句中,即

If reader.Read() Then
    Dim index As Integer = reader.GetOrdinal("RESULT1")
    If reader.IsDBNull(index) Then
        RESULT1 = String.Empty
    Else
        RESULT1 = reader(index)
    End If
End If

请注意,这是有效的,因为您的SQL应该只返回一条记录.如果您正在读取多个记录,则需要在循环中调用Read语句,直到没有更多记录为止,即

Do While reader.Read()

Loop

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读