@Migliorabile @Asql Ciao
Per quanto riguarda la Transazione, io la utilizzo SOLO SE ho una serie di operazioni sql (query escluse) in elaborazione consecutiva e quindi ove una di queste va in errore, nessuna delle precedenti operazioni effettuate (dalla apertura di transazione) deve essere committata e quindi ho possibilità di RollBack.
Ove faccio delle singole insert/update/delete non ho trovato utile aprire anche una transazione, in quanto se l'operazione NON termina con esito positivo NON ho altre operazioni collegate da annullare.
Sul discorso dichiarazione variabile di connessione, allego sotto pezzo di codice estrapolato dove vediamo:
1. Dichiarazione di variabile di connessione come Object generico appositamente fatto per poi pter essere instanziata con tipo relativo a DB in uso (ho sempe voluto che il mio codice potesse funzionare con qualsiasi tipo di DB relazionale, anche se poi le mie prove iniziali sono state fatte sui 3 DB già menzionati + SqlIte). Ricordo che l'errore in oggetto è saltato fuori solo con DB Microsoft e NON con MySql (che poi è quello che conosco di meno...)
2. Chiamata a function di apertura transazione dove si è verificato il problema qualche giorno fa SOLO in DEBUG.
Aggiungo:
1. Quando ho intercettato il problema la prima volta stavo facendo un normale debug e forse (dico forse...) ero in un punto in cui era aperta una transazione e lì è iniziato lo sfinimento che mi ha portato fino a notte senza capire il perchè dell'assurdo errore solo in debug.
2. Il giorno dopo, giorno in cui ho iniziato a chiedere aiuto su questo forum, al rientro a casa ho riprovato a capire il perchè dell'errore, ma dopo avere spento e riacceso il PC (chissa' se qualcosa rimane attivo lo stesso....) ma SOPRATUTTO mi sono messo in una posizione diversa di codice, ovvero mi sono messo nella prima operazione di apertura connessione che incontra il codice quando parte....lì NON ho alcuna transazione aperte,,,ma sempre li l'errore, sempre e solo con il Debug, è riapparso per un po' di volte...salvo poi scomparire "magicamente" dopo che ho messo la Close() (per me assurda) prima della Open (come suggerito da Sishandrea) ovvero togliendo poi tale Close e risimulando la situazione di errore (in Debug) non è più saltato fuori...quasi come se la Close aggiunta in quel punto abbia pulito anche qualcosa rimasto in giro da precedenti Thread.
P.S. Se vi chiedete il perchè delle mie nomenclature: arrivavo dal Cobol (che uso tuttora con un grosso cliente) e mi sono portato dietro quello che consideravo cose utili di quel linguaggio!!
Grazie a tutti (sotto allegato estrapolazione codice)
Dim L_Conn_1 As Object
'--------------------------------
'Apertura(connessione)
'-------------------------------
F_RcSQL = dalXXdb_OpenDB(L_Conn_1)
Public Function dalXXdb_OpenDB(ByRef L_connessione As Object) As Boolean
Select Case Tipo_DB_Corrente
Case clsXXcostanti.C_DB_ACCESS 'Microsoft Access
L_connessione = New System.Data.OleDb.OleDbConnection()
L_Nuova_ConnString = stringa....
Case clsXXcostanti.C_DB_SqlServer 'Microsoft SQL server
L_connessione = New System.Data.SqlClient.SqlConnection()
L_Nuova_ConnString = stringa....
Case clsXXcostanti.C_DB_MySql 'MySql
L_connessione = New MySql.Data.MySqlClient.MySqlConnection()
L_Nuova_ConnString = stringa....
End Select
L_connessione.ConnectionString = L_Nuova_ConnString
'ISTRUZIONE SOTTO DI CLOSE AGGIUNTA SU SUGGERIMENTO SI SISHANDREA
L_RC = dalXXdb_PrimaDiOpen_CloseDB(L_connessione) 'CHIAMA FUNCTION DI CHIUSURA CONNESSIONE..CHE NON VA IN ERRORE ANCHE SE LA TROVA CHIUSA
'SE METTEVO BREAK QUI IN DEBUG OTTENEVO ERRORE PER CONNESSIONE GIA' APERTA E STATO = 1
'SOLO SE MI FERMAVO CON BREAK SU ISTRUZIONE SOTTO...ALTRIMENTI NO PROBLEM...
L_connessione.Open()