Ado.net - gestione di un Datareader

venerdì 09 aprile 2004 - 17.07

trinity Profilo | Guru

Ragazzi sto utilizzando la tecnologia Ado.net con database mysql e quindi per la connessione ad esso utilizzo ODBCNET, mi capita una cosa stranissima, devo fare una select di una tabella e e nel ciclo while datareader.read devo fare un insert, ora vi posto il mio codice perchè mi esce il seguente errore: "Alla connessione è già associato un datareader aperto, che deve essere chiuso". Come vedrete nel mio codice il datareader non può essere chiuso perchè da esso attingo i dati per l'insert che devo fare, altr persone mi dissero che dovevo creare una nuova connessione al database e appoggiare la seconda commnad a questa connessione, a mio parere è squallido farlo...Mi potete aiutare a capire e risolvere questo problema?

CODICE:

Dimconn As New OdbcConnection()
conn.ConnectionString = "DSN=hmanager"
conn.Open()

Dim sql As String
sql = "DELETE FROM stampaschedine"
Dim cmd As New OdbcCommand(sql, conn)
cmd.ExecuteNonQuery()
'----------------------------------------------
cmd.CommandText = "SELECT * FROM gestcliente WHERE codice='1'" & "ORDER BY codice,progschedina,cod_alloggiato,cognome,nome"
Dim read As OdbcDataReader = cmd.ExecuteReader()
Dim sql1 As String
While read.Read()
Try
sql1 = "INSERT INTO stampaschedine(codice,data_elaborazione,progschedina,tipo_alloggiato,data_arrivo,cognome,nome,sesso,data_nascita,luogo_nascita,comune_nascita,prov_nascita,cittadinanza,luogo_residenza,prov_residenza,stato_residenza,documento,ndoc,luogo_doc,stato_doc) VALUES ('" & read.GetValue(read.GetOrdinal("codice")) & "','" & read.GetValue(read.GetOrdinal("data_elaborazione")) & "','" & read.GetValue(read.GetOrdinal("progschedina")) & "','" & read.GetValue(read.GetOrdinal("tipo_alloggiato")) & "','" & read.GetValue(read.GetOrdinal("data_arrivo")) & "','" & Replace(read.GetValue(read.GetOrdinal("cognome")), "'", "''") & "','" & Replace(read.GetValue(read.GetOrdinal("nome")), "'", "''") & "','" & read.GetValue(read.GetOrdinal("sesso")) & "','" & read.GetValue(read.GetOrdinal("data_nascita")) & "','" & Replace(read.GetValue(read.GetOrdinal("luogo_nascita")), "'", "''") & "','" & Replace(read.GetValue(read.GetOrdinal("comune_nascita")), "'", "''") & "','" & read.GetValue(read.GetOrdinal("prov_nascita")) & "','" & Replace(read.GetValue(read.GetOrdinal("cittadinanza")), "'", "''") & "','" & Replace(read.GetValue(read.GetOrdinal("luogo_residenza")), "'", "''") & "','" & read.GetValue(read.GetOrdinal("prov_residenza")) & "','" & Replace(read.GetValue(read.GetOrdinal("stato_residenza")), "'", "''") & "','" & Replace(read.GetValue(read.GetOrdinal("documento")), "'", "''") & "','" & Replace(read.GetValue(read.GetOrdinal("ndoc")), "'", "''") & "','" & Replace(read.GetValue(read.GetOrdinal("luogo_doc")), "'", "''") & "','" & Replace(read.GetValue(read.GetOrdinal("stato_doc")), "'", "''") & "')"
Dim MySqlcmd As New OdbcCommand(sql1, conn)
MySqlcmd.ExecuteNonQuery()
MySqlcmd.Connection.Close()
Catch
MsgBox(Err.Description, MsgBoxStyle.Critical, "Hotel Manager")
End Try
End While
cmd.Connection.Close()
conn.Close()

Brainkiller Profilo | Guru

E' squallido ma è l'unica soluzione possibile.
O chiudi il primo datareader oppure crei una nuova connessione e un nuovo Command.
Invece di usare ODBC .NET utilizza il provider MySql, che è molto meglio.

ciao
david
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2013
Running on Windows Server 2008 R2 Enterprise, SQL Server 2008 & ASP.NET 3.5