2014-12-31 40 views
0

什麼意思是,當數據庫上雙擊一行時,程序應該將數據從該行中拉出並填充到文本框中。這是我到目前爲止的代碼,當雙擊一行時,我得到「沒有數據存在的行/列」。當我有數據時,爲什麼會出現「沒有數據存在行/列」錯誤?

感謝,

Private Sub dtg_Email_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtg_Email.DoubleClick 
    Dim conn As New OleDbConnection 
    Dim cmd As New OleDbCommand 
    Dim dr As OleDbDataReader 

    Try 
     conn = New OleDbConnection(Get_Constring) 
     conn.Open() 
     cmd.Connection = conn 
     cmd.CommandText = CommandType.Text 
     ReadPlayerID = Team_Database.PlayerID 
     cmd.CommandText = "SELECT Surname, Forename, Email FROM PlayerDatabase WHERE ID = " & ReadPlayerID 
     dr = cmd.ExecuteReader 


     Me.txt_Surname.Text = IIf(Not IsDBNull(dr("Surname")), dr("Surname"), "") 
     Me.txt_Forename.Text = IIf(Not IsDBNull(dr("Forename")), dr("Forename"), "") 
     Me.txt_Email.Text = IIf(Not IsDBNull(dr("Email")), dr("Email"), "") 

    Catch ex As Exception 
     MsgBox(ErrorToString) 
    Finally 
     conn.Close() 
    End Try 
End Sub 

enter image description here

+1

關於您的代碼風格,您應該將連接封裝在Using塊中,然後您需要再次關閉閱讀器。通過'If(statement,trueValue,falseValue)'語法廢棄'IIf'。 – LWChris

回答

2

需要調用dr.Read前進到下一個(第一個在這種情況下)的記錄,你可以從第一行搶任何數據之前。

dr = cmd.ExecuteReader 

dr.Read 

Me.txt_Surname.Text = IIf(Not IsDBNull(dr("Surname")), dr("Surname"), "") 
+0

這並沒有解決它,try語句仍然有問題,它恢復到catch部分。 – user3287552

+0

錯誤有什麼不同? – DoctorMick

+0

不,相同。 – user3287552

0

至少對於其他的DataReader是很常見的「的ExecuteReader」只有初始化的讀者,當你有遍歷結果與dr.Read設置一次。也許這對你的情況是正確的。

0

把一個破發點上

Me.txt_Surname.Text = IIF(不IsDBNull以便(DR( 「姓」)),博士( 「姓」), 「」)

一旦它擊中將鼠標懸停在dr上並右鍵單擊快速監視。

檢查quckwatch如果dr是填充並有數據。

相關問題