Как использовать DataReader из Oledb и получить результаты в Richtextbox

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

Это работает нормально, но когда я ищу ноль, это выдает ошибку. Это говорит о том, что у меня ошибка в строке

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

кто-нибудь предлагает?

1 ответ

Решение
rdr.GetString(8).ToString()

если rdr.GetString(8) является нулевым, это классическое исключение нулевой ссылки

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... вниз

Другие вопросы по тегам