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

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.
Sintomi
Quando si crea un comando con parametri a fronte di Microsoft SQL Server 7.0, se si richiama il metodoPrepareprima 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 metodoPrepareprima 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 eseguePreparesolo dopo l'esecuzione del primo comando. Tale ottimizzazione impedisce l'overhead diPreparese in seguito non vengono eseguiti comandi.
Risoluzione
Per risolvere il problema, chiamare il metodoPreparesolo 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 nomiSystem.Datae in caso negativo aggiungerne uno.
  4. Aggiungere un pulsanteCommandsul Form1. Modificare la proprietàNamedel pulsante inbtnTeste modificare la proprietàTextinTest.
  5. Utilizzare l'istruzioneImportssugli spazi dei nomiSystem,System.DataeSystem.Data.SqlClientin 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 SystemImports System.Data.OleDbImports 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 menuDebugscegliereAvviaed eseguire il progetto.
  9. Fare clic suTest. 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 dacommand.Prepareche 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):
Proprietà

ID articolo: 310368 - Ultima revisione: 02/24/2014 06:07:40 - Revisione: 2.2

  • Microsoft ADO.NET (fornito con .NET Framework)
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • kbnosurvey kbarchive kbnofix kbprb kbgrpdsvbdb kbgrpdsmdac KB310368
Feedback