0
Dim srch As String
        srch = ccode.Text
        conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + IO.Directory.GetCurrentDirectory + "\ptdr.accdb"
        cmd.Connection = conn
        conn.Open()

        Dim dsrch As New OleDbCommand("SELECT pname, page, vdate, psex, summer, bldp, blds, photh, diag, rl, trtmnt, nvdate FROM ptnt_data WHERE pcode = " & srch & "", conn)
        Dim rdr As OleDbDataReader = dsrch.ExecuteReader()
        Dim dg As String = ""

            'diagnosis'
            dg = rdr.GetString(8).ToString()
            If String.IsNullOrEmpty(dg) Then
                diag1.Text = ""
            ElseIf String.IsNullOrWhiteSpace(dg) Then
                diag1.Text = ""
            Else
                diag1.Text = dg

            End If

它工作正常,但是当我搜索 null 时,它会出错。它说我在以下行有一个错误

dg = rdr.GetString(8).Tostring()

有什么建议吗?

4

1 回答 1

0
rdr.GetString(8).ToString()

if rdr.GetString(8) is null 这是一个经典的空引用异常

rdr.GetString(8)是一个字符串,所以只需删除.ToString()

根据我下面的评论,如果数据库具有此数据的基础字符串类型,则只能运行 GetString,列 diag 的数据类型是什么?

(即在调试器中运行 rdr.GetFieldType(8) 并提供类型名称)

正如您已经确认这一个字符串类型并且问题只是空处理(对不起,我没有从您的问题中发现),您需要:

If rdr.IsDBNull(8) Then diag1.Text = "" Else diag1.Text = rdr.GetString(8) EndIf

哪个应该取代 Dim dg... 中的所有内容

于 2015-02-13T16:43:43.007 回答