Как использовать 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... вниз