Ho un GridView.
Recupero i dati in un DataTable utilizzando System.Data.Odbc.
Collego la griglia al datatable.
Il problema sorge nell'aggiunta nuovo record. Ho pensato di personalizzare il comando di inserimento e di lasciare inalterati i comandi di update e cancel creati con CommandBuilder.
Il messaggio di errore è:
ExecuteReader richiede che il comando abbia una transazione quando la connessione assegnata al comando è in una transazione locale in sospeso. La proprietà Transaction del comando non è stata inizializzata.
il codice incriminato è:
codice:Private Sub DataTableUpdate(stringaConnessione As String, sql As String, dt As DataTable, Optional commit As Boolean = True) Dim connessione As o.OdbcConnection = Nothing Dim DataAdapter As o.OdbcDataAdapter = Nothing Dim Transazione As o.OdbcTransaction = Nothing Dim CommandBuilder As o.OdbcCommandBuilder = Nothing 'comando di inerimento personalizzato Dim cmdInsert As o.OdbcCommand = Nothing Try connessione = New o.OdbcConnection(stringaConnessione) connessione.Open() Transazione = connessione.BeginTransaction() cmdInsert = connessione.CreateCommand() cmdInsert.CommandText = "insert into conto (id_utente, data_operazione, data_valuta, id_operazione, valore_operazione, dettaglio_operazione, id_numero_operazione) values (?, ?, ?, ?, ?, ?, ?) " cmdInsert.Transaction = Transazione Dim id_numero_operazione As Integer = msodbc.ProssimoID(cmdInsert, "conto", "id_numero_operazione") cmdInsert.Parameters.Clear() 'utilizza i valori correnti del campo cmdInsert.Parameters.Add("@p1", Odbc.OdbcType.Int, 0, "id_utente") cmdInsert.Parameters.Add("@p2", Odbc.OdbcType.DateTime, 0, "data_operazione") cmdInsert.Parameters.Add("@p3", Odbc.OdbcType.DateTime, 0, "data_valuta") cmdInsert.Parameters.Add("@p4", Odbc.OdbcType.Int, 0, "id_operazione") cmdInsert.Parameters.Add("@p5", Odbc.OdbcType.Decimal, 0, "valore_operazione") cmdInsert.Parameters.Add("@p6", Odbc.OdbcType.VarChar, 250, "dettaglio_operazione") cmdInsert.Parameters.Add("@p7", Odbc.OdbcType.Int).Value = id_numero_operazione DataAdapter = New o.OdbcDataAdapter(sql, connessione) CommandBuilder = New o.OdbcCommandBuilder(DataAdapter) 'CommandBuilder.QuotePrefix = "[" : CommandBuilder.QuoteSuffix = "]" CommandBuilder.ConflictOption = ConflictOption.OverwriteChanges DataAdapter.DeleteCommand = CommandBuilder.GetDeleteCommand() 'DataAdapter.InsertCommand = CommandBuilder.GetInsertCommand() DataAdapter.InsertCommand = cmdInsert DataAdapter.UpdateCommand = CommandBuilder.GetUpdateCommand() DataAdapter.DeleteCommand.Transaction = Transazione DataAdapter.InsertCommand.Transaction = Transazione DataAdapter.UpdateCommand.Transaction = Transazione DataAdapter.Update(dt) If commit Then Transazione.Commit() Else Transazione.Rollback() End If Catch ex As Exception Throw Finally If connessione IsNot Nothing Then connessione.Dispose() If DataAdapter IsNot Nothing Then DataAdapter.Dispose() If CommandBuilder IsNot Nothing Then CommandBuilder.Dispose() End Try End Sub
Mi dareste una mano a risolvere?

Rispondi quotando