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