Allora allora...
Sarò semplice, inventando la situazione:
utilizzando un dadareader ,creo una datatable composta di una colonna [ID(numerico)]
Questo ID è direttamente collegato a una tabella di nomi (ID corrispondente a NOME]
Ora voglio che costruendo la datatable
al posto del numero (ID) appaia il NOME.
Ho una funzione che restituisce il NOME (stringa) passandogli l'ID.
Questa funzione però utilizza un datareader!
quindi il compilatore protesta perchè posso avere un solo datareader aperto su una connessione, giustamente!
Sarò niubbo...ma come si risolve??
Non posso abbandonare o chiudere il Datareader che costruisce la tabella!
per chi ha voglia di leggere posto
LA SUB CHE CREA LA DATATABLE
in rosso la riga incriminata, il resto funziona.
codice:
Sub creadata()
Dim dt As New DataTable("Richieste")
Dim dc1 As New DataColumn("Id", GetType(Integer))
Dim dc2 As New DataColumn("id_utente", GetType(Integer))
Dim dc3 As New DataColumn("Nome", GetType(Integer))
Dim dc4 As New DataColumn("Titolo", GetType(String))
Dim dc5 As New DataColumn("Data", GetType(Date))
dt.Columns.Add(dc1)
dt.Columns.Add(dc2)
dt.Columns.Add(dc3)
dt.Columns.Add(dc4)
dt.Columns.Add(dc5)
Dim stringasql As String
Dim objcomm As MySqlCommand
Dim m_reader As MySqlDataReader
Apriconnessione()
stringasql = "SELECT id_utente,data_ins,titolo,id FROM richieste where id_categoria=" & id_prima_categoria & " ORDER by data_ins DESC"
objcomm = New MySqlCommand(stringasql, conn)
m_reader = objcomm.ExecuteReader
m_reader.Read()
While m_reader.Read
Dim dr As DataRow = dt.NewRow
dr("Id") = m_reader("id")
dr("id_utente") = m_reader("id_utente")
dr("titolo") = m_reader("titolo")
dr("data") = m_reader("data_ins")
dr("nome") = TrovaUserNameDaId(dr("id_utente"))
dt.Rows.Add(dr)
End While
m_reader.Close()
DataGridView1.DataSource = dt
End Sub
-
-
-
LA SUB CHE TROVA IL NOME UTENTE
codice:
Public Function TrovaUserNameDaId(ByVal id As Integer) As String
Dim query As String = "SELECT login FROM anag_users where user_id=" & id
Apriconnessione()
Dim cmd As New MySqlCommand(query, conn)
Dim reader As MySqlDataReader
reader = cmd.ExecuteReader()
If reader.HasRows = True Then
reader.Read()
TrovaUserNameDaId = reader.GetString("login").Trim
Else
TrovaUserNameDaId = 0
End If
reader.Close()
End Function