PRB: Errore in SQL Server 7.0 quando si chiama Command.Prepare prima di aggiungere parametri utilizzando Visual Basic .NET

Traduzione articoli Traduzione articoli
Identificativo articolo: 310368 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo è stato precedentemente pubblicato con il codice di riferimento I310368
Questo articolo è stato archiviato. L?articolo, quindi, viene offerto ?così come è? e non verrà più aggiornato.
Per la versione di questo articolo relativa a Microsoft Visual C# .NET, vedere (gli articoli con prefisso "Q" contengono informazioni in inglese): 311348.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Quando si crea un comando con parametri a fronte di Microsoft SQL Server 7.0, se si richiama il metodo Prepare prima di aggiungere parametri al comando, viene visualizzato un messaggio di errore analogo al seguente:
Eccezione non gestita di tipo "System.Data.SqlClient.SqlException" in system.data.dll.
Ulteriori informazioni: Errore di sistema.
Il problema non si verifica in SQL Server 2000.

Cause

Il problema si verifica in SQL Server 7.0 perché, per le caratteristiche di progettazione del prodotto, non è consentito eseguire il metodo Prepare prima di aggiungere parametri. Ciò vale per la maggior parte dei sistemi di database.

In SQL Server 2000 l'eccezione di cui sopra non viene generata perché in tale applicazione si esegue Prepare solo dopo l'esecuzione del primo comando. Tale ottimizzazione impedisce l'overhead di Prepare se in seguito non vengono eseguiti comandi.

Risoluzione

Per risolvere il problema, chiamare il metodo Prepare solo dopo aver aggiunto i parametri.

Informazioni

Procedura per riprodurre il problema

Nel codice di esempio viene utilizzata la tabella "Region" del database Northwind.
  1. Aprire Microsoft Visual Studio .NET.
  2. Creare un nuovo progetto di Applicazione Windows in Visual Basic. In base all'impostazione predefinita verrà aggiunto al progetto il Form1.
  3. Verificare che il progetto contenga un riferimento allo spazio dei nomi System.Data e in caso negativo aggiungerne uno.
  4. Aggiungere un pulsante Command sul Form1. Modificare la proprietà Name del pulsante in btnTest e modificare la proprietà Text in Test.
  5. Utilizzare l'istruzione Imports sugli spazi dei nomi System, System.Data e System.Data.SqlClient in modo che più avanti nel codice non sia necessario qualificare dichiarazioni in essi. Aggiungere il codice riportato di seguito alla sezione General Declarations di Form1:
    Imports System
    Imports System.Data.OleDb
    Imports System.Data.SqlClient
  6. Aggiungere il codice seguente nella finestra del codice dopo la sezione "Codice generato da Progettazione Windows Form":
        Private Sub btnTest_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnTest.Click
            Dim myConnString As String = _
                "User ID=sa;password=sa;Initial Catalog=Northwind;Data Source=myServer"
            Dim id As Integer = 25
            Dim desc As String = "myFirstRegion"
            Dim rConn As SqlConnection = New SqlConnection(myConnString)
            rConn.Open()
            Dim command As SqlCommand = New SqlCommand("", rConn)
            command.CommandText = "insert into Region (RegionID, RegionDescription)" & _
                                  "values (@id, @desc)"
    
            'SQL Server 7.0 throws an exception here.
            'Comment the following line to resolve this problem against SQL Server 7.0.
            command.Prepare()
    
            command.Parameters.Add("@id", SqlDbType.Int, 4)
            command.Parameters.Add("@desc", SqlDbType.Char, 50)
            'You can call Prepare after you set up CommandText and parameters.
            command.Prepare() 
    
            command.Parameters(0).Value = id
            command.Parameters(1).Value = desc
            command.ExecuteNonQuery()
            MessageBox.Show("Updated Successfully")
        End Sub
  7. Modificare la stringa di connessione (myConnString) in base all'ambiente di lavoro.
  8. Salvare il progetto. Dal menu Debug scegliere Avvia ed eseguire il progetto.
  9. Fare clic su Test. Se si è connessi a un database di SQL Server 7.0, verrà generata l'eccezione menzionata sopra.

    Se si è connessi a un database SQL Server 2000, il codice viene eseguito correttamente e verrà visualizzato il messaggio che segnala la riuscita dell'aggiornamento.
  10. Per risolvere il problema in SQL Server 7.0, rimuovere il commento da command.Prepare che precede il codice di aggiunta dei parametri ed eseguire di nuovo il progetto.

Riferimenti

Per ulteriori informazioni su oggetti e sintassi ADO.NET, fare riferimento alla seguente documentazione del Software Development Kit (SDK) di .NET Framework (informazioni in lingua inglese):
Accessing Data with ADO.NET
http://msdn2.microsoft.com/en-us/library/e80y5yhx(vs.71).aspx

Proprietà

Identificativo articolo: 310368 - Ultima modifica: lunedì 24 febbraio 2014 - Revisione: 2.2
Le informazioni in questo articolo si applicano a
  • Microsoft ADO.NET (fornito con .NET Framework)
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Chiavi: 
kbnosurvey kbarchive kbnofix kbprb kbgrpdsvbdb kbgrpdsmdac KB310368
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