FIX: Provider SQLOLEDB erroneamente lascia transazione aperta

Traduzione articoli Traduzione articoli
Identificativo articolo: 281633 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo è stato archiviato. L?articolo, quindi, viene offerto ?così come è? e non verrà più aggiornato.
BUG #: 58292 (SQLBUG_70)
BUG #: 235846 (SHILOH)
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Esecuzione di una determinata sequenza di comandi riguardanti le transazioni esplicite e i parametri in un'applicazione che utilizza in modo errato il provider di SQLOLEDB lascia aperta una transazione senza commit. Ciò può causare gravi blocco e altri problemi.

Cause

Sebbene l'opzione SET 'implicit_transactions' è impostare su OFF, il provider SQLOLEDB apertura di una transazione implicita.

Risoluzione

MDAC 2.6

Per risolvere il problema, ottenere il service pack più recente per Microsoft Data Access Components 2.6. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
300635Come ottenere il service pack più recente di MDAC 2.6

Hotfix

importante : prima di applicare questo aggiornamento rapido (hotfix) è necessario installare Microsoft Data Access Components versione 2.6.

La versione inglese di questa correzione deve essere di avere i seguenti attributi di file o versioni successive:
   Date       Time     Version     Size      File name      Platform
   -----------------------------------------------------------------
   11/22/00   8:43pm   8.00.0225   491,584   Sqloledb.dll   Intel
   11/22/00   8:43pm   8.00.0225    61,440   Sqloledb.rll   Intel
				
Nota: a causa di dipendenze tra i file, la funzionalità contenente i file sopra o aggiornamento rapido (hotfix) più recente potrebbe includere anche file aggiuntivi.

Workaround

Per aggirare questo tipo di problema, eseguire una qualsiasi delle operazioni seguenti:
  • Utilizzare il provider OLE DB per ODBC anziché il SQLOLEDB provider.

    - oppure -
  • Inserire altre transazioni intorno al codice che crea il problema.

Status

Microsoft ha confermato che si tratta da un problema nel Provider Microsoft OLE DB per SQL Server incluso in versioni di Microsoft Data Access Components (MDAC) 2.1, 2.5 e 2.6.

MDAC 2.6

Questo problema è stato innanzitutto corretto in Microsoft Data Access Components 2.6 Service Pack 1.


MDAC 2.5

Questo problema è stato innanzitutto corretto nella versione di Sqlredis.exe fornita con SQL Server 7.0 Service Pack 4.

Informazioni

Tramite l'analisi dell'applicazione, si può vedere nella SQL Server Profiler che il provider SQLOLEDB sta inviando le seguenti istruzioni a SQL Server:
SET FMTONLY ON select ... SET FMTONLY OFF
set implicit_transactions off SET NO_BROWSETABLE OFF
				
questo implicit_transaction cause una ' ' già aperto.

Quando si utilizza il provider OLE DB per ODBC e il driver SQL Server, invece, lo stesso codice Visual Basic/ADO esatto invia le seguenti istruzioni a SQL Server:
set implicit_transactions off SET NO_BROWSETABLE OFF
SET FMTONLY ON select  ... SET FMTONLY OFF
				
viene pertanto il SELECT FMTONLY aperta una transazione implicita con SQLOLEDB. Tuttavia, poiché l'applicazione viene mai aperto questa transazione, l'applicazione verrà in genere non chiuderlo. Questa operazione solo verrà chiuso al momento della successiva transazione esplicita.

Proprietà

Identificativo articolo: 281633 - Ultima modifica: lunedì 24 febbraio 2014 - Revisione: 6.4
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
Chiavi: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbfix kbmdac260sp1fix kbqfe KB281633 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 281633
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com