2014-03-04 51 views
0

下面是用於將數據提取到文本框中的代碼,但它不工作它顯示錯誤沒有數據退出行/列而數據和數據字段是完全正確的。 請幫忙。從asp.net中的數據庫檢索數據使用vb

Dim Connection As OleDbConnection 
    Connection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/db/QardanHasana.mdb")) 
    Connection.Open() 

    Dim ejamaatregcmd As OleDbCommand 
    Dim ejamaatregdtrdr As OleDbDataReader 
    ejamaatregcmd = New OleDbCommand("SELECT ITSData.[EJamaatID], ITSData.[ITSFirstName] FROM ITSData WHERE EjamaatID= @EjamaatID", Connection) 
    ejamaatregcmd.Parameters.Add(New OleDbParameter("@EjamaatID", txtEjamaatID.Text)) 
    ejamaatregdtrdr = ejamaatregcmd.ExecuteReader() 


    If ejamaatregdtrdr.HasRows Then 
     txtFirstName.Text = ejamaatregdtrdr.item("ITSFirstName").ToString() 
    end if 
+0

您可以添加確切的錯誤得到? – peter

回答

1

一個DataReader需要Read通話將自己定位在第一條記錄檢索

ejamaatregdtrdr = ejamaatregcmd.ExecuteReader() 
If ejamaatregdtrdr.HasRows Then 
    ejamaatregdtrdr.Read() 
    txtFirstName.Text = ejamaatregdtrdr.item("ITSFirstName").ToString() 
End if 

順便說,讀,如果沒有行讀返回false,這樣你就可以刪除測試對於HasRows,寫簡單的

ejamaatregdtrdr = ejamaatregcmd.ExecuteReader() 
If ejamaatregdtrdr.Read() Then 
    txtFirstName.Text = ejamaatregdtrdr.item("ITSFirstName").ToString() 
End if 

另一個建議,以提高你的代碼是開始使用Using Statement

Using Connection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;....") 
Using ejamaatregcmd = new OleDbCommand("SELECT ITSData.[EJamaatID], ITSData.[ITSFirstName] FROM ITSData WHERE EjamaatID= @EjamaatID", Connection) 
    Connection.Open() 
    ejamaatregcmd.Parameters.Add(New OleDbParameter("@EjamaatID", txtEjamaatID.Text)) 
    Using ejamaatregdtrdr = ejamaatregcmd.ExecuteReader() 
     If ejamaatregdtrdr.Read() Then 
      txtFirstName.Text = ejamaatregdtrdr.item("ITSFirstName").ToString() 
     End if 
    End Using 
End Using 
End Using   

using語句對於幫助您關閉和處理連接,命令和閱讀器等一次性對象非常重要。缺乏正確的配置你的代碼會使用更多的內存並鎖定資源,導致應用程序更不穩定。

0

在從DataReader讀取數據之前,您需要通過調用Read方法將行移動到第一行。如果存在數據返回true,所以你不需要檢查HasRows屬性:

ejamaatregdtrdr = ejamaatregcmd.ExecuteReader() 
If ejamaatregdtrdr.Read() Then 
    txtFirstName.Text = ejamaatregdtrdr.Item("ITSFirstName").ToString() 
End if 
0

我一般會做類似下面

Function GetResult(ID As string) As String 
    GetResult = "No Data" 'Default Result 
Dim conn As System.Data.OleDb.OleDbConnection = *NewConnectionObject* 
Dim comm As System.Data.OleDb.OleDbCommand = *NewCommmandObject* 
comm.Parameter.AddWithValue("@Parametername",ID) 

    Using reader As System.Data.OleDb.OleDbDataReader = comm.ExecuteReader() 
     If reader.HasRows Then 
      'Reader has data, so iterate through it 
      GetResult = "" 
      while reader.read 
       GetResult += reader("FirstName") 
      End While 
     Else 
      'Either Do Nothing - Default Result will show 
      'Throw New System.Exception("Empty Data") 'Try Catch Statement have overhead.. so it's not a popular methodology 
      'Or Log Something.. 
     End If 
    End Using 
    If conn.state = connection.open Then 
     conn.close 
    End 
End Function