Jag försöker fylla en dropdownlist med värden från en databas men får det inte att fungera.
Dim objcmd As New OleDbCommand _
("SELECT lagid_a,lagid_b from matcher where id=" & m_id & "", objconn)
Dim dr As OleDbDataReader
objconn.Open()
dr = objcmd.ExecuteReader
If dr.Read() Then
If dplLag.SelectedItem.Text = "A" Then
Dim objcmd1 As New OleDbDataAdapter _
("select * from trupper where lag_id=" & dr("lagid_a") & "", objconn)
Dim ds1 As DataSet = New DataSet()
objcmd1.Fill(ds1, "matchprotokoll")
For i = 1 To ds1.Tables("matchprotokoll").Rows.Count
dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
Next
Else
Dim objcmd1 As New OleDbDataAdapter _
("select * from trupper where lag_id=" & dr("lagid_b") & "", objconn)
Dim ds1 As DataSet = New DataSet()
objcmd1.Fill(ds1, "matchprotokoll")
For i = 1 To ds1.Tables("matchprotokoll").Rows.Count
dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
Next
End If
End If
Felmeddelande
Exception Details: System.InvalidOperationException: There is already an open DataReader associated with this Connection which must be closed first.
Source Error:
Line 56:
Line 57: Dim ds1 As DataSet = New DataSet()
Line 58: objcmd1.Fill(ds1, "matchprotokoll")
Line 59: objconn.Close()
Line 60: For i = 1 To ds1.Tables("matchprotokoll").Rows.Count
Source File: h:\inetpub\wwwroot\cup\mphandelser.aspx.vb Line: 58
Eftersom du har en "DataReader" öppen som jobbar med det aktuella connection-objektet kan du inte använda connection-objektet igen utan att stänga "Readern" först.
Alternativet är alltså att använda ett nytt connection-objekt, typ:
dim objCmd1 as new OleDBDataAdapter("SELECT * FROM table", new OleDbConnection("CONN_STR"))
Dim objcmd As New OleDbCommand _
("SELECT lagid_a,lagid_b from matcher where id=" & m_id & "", objconn)
Dim dr As OleDbDataReader
objconn.Open()
dr = objcmd.ExecuteReader
If dr.Read() Then
If dplLag.SelectedItem.Text = "A" Then
Dim objcmd1 As New OleDbDataAdapter _
("select * from trupper where lag_id=" & dr("lagid_a") & "", objconn)
objconn.Close()
Dim ds1 As DataSet = New DataSet()
objcmd1.Fill(ds1, "matchprotokoll")
For i = 1 To ds1.Tables("matchprotokoll").Rows.Count
dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
Next
objconn.Open()
Else
Dim objcmd1 As New OleDbDataAdapter _
("select * from trupper where lag_id=" & dr("lagid_b") & "", objconn)
objconn.Close()
Dim ds1 As DataSet = New DataSet()
objcmd1.Fill(ds1, "matchprotokoll")
For i = 1To ds1.Tables("matchprotokoll").Rows.Count
dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
Next
objconn.Open()
End If
End If
Får ett nytt felmeddelande
Exception Details: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
Source Error:
Line 59:
Line 60: For i = 0 To ds1.Tables("matchprotokoll").Rows.Count
Line 61: dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
Line 62: dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
Line 63: Next
Source File: h:\inetpub\wwwroot\cup\mphandelser.aspx.vb Line: 61
Koden du postade stämmer inte med felmeddelandet. Jag hittar iaf inte någon loop där du börjar med i = 0. Men koden som du har i felmeddelandet kan du fixa så här:
For i = 0 To ds1.Tables("matchprotokoll").Rows.Count - 1
dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
Next
For i = 0 To ds1.Tables("matchprotokoll").Rows.Count - 1
dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
Next
Men den koden finns inte med i det stora stycket du postade. Hursomhelst borde du loopa till efter antalet element i dblSpelare och inte i ds1. Jag ser inte vad dblSpelare är får något, men typ så här:
for i = 0 to dplSpelare.Items.Count - 1
dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
next