2014-03-04 54 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