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()

) が null の場合rdr.GetString(8、これは従来の null 参照例外です

rdr.GetString(8)は文字列なので、削除するだけです.ToString()

以下の私のコメントによると、DB にこのデータの基になる文字列型がある場合にのみ GetString を実行できます。列 diag のデータ型は何ですか?

(つまり、デバッガーで rdr.GetFieldType(8) を実行し、型名を指定します)

あなたが確認したように、これ文字列型であり、問​​題はnull処理にあるだけです(申し訳ありませんが、あなたの質問からそれを見つけられませんでした)必要があります:

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

Dim dg ... down からすべてを置き換える必要があります

于 2015-02-13T16:43:43.007 に答える