Visual Basic .NET: Fehler in SQL Server 7.0, wenn Sie Command.Prepare aufrufen, bevor Sie Parameter hinzufügen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 310368 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D310368
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
310368 PRB: Error in SQL Server 7.0 When You Call Command.Prepare Before You Add Parameters Using Visual Basic .NET
Eine Version dieses Artikels für Microsoft Visual C# .NET finden Sie unter 311348.



Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn Sie einen parametrisierten Befehl für Microsoft SQL Server 7.0 erstellen und die Prepare-Methode aufrufen, bevor Sie Parameter zu dem Befehl hinzufügen, wird die folgende Fehlermeldung angezeigt:
Eine nicht behandelte Ausnahme des Typs 'System.Data.SqlClient.SqlException' ist in system.data.dll aufgetreten.
Weitere Informationen: Systemfehler.
Dieses Problem tritt bei SQL Server 2000 nicht auf.

Ursache

Dieses Problem tritt bei SQL Server 7.0 auf, weil Sie die Prepare-Methode programmtechnisch bedingt nicht vor dem Hinzufügen von Parametern ausführen können. Dies trifft auf die meisten Datenbanksysteme zu.

SQL Server 2000 erzeugt die oben beschriebene Ausnahme nicht, weil er Prepare erst ausführt, nachdem der erste Befehl ausgeführt wurde. Diese Optimierung verhindert den Overhead von Prepare, wenn nachfolgend keine Befehle ausgeführt werden.

Lösung

Um dieses Problem zu beheben, rufen Sie die Prepare-Methode erst nach dem Hinzufügen der Parameter auf.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

Im folgenden Beispielcode wird die Tabelle Region der Northwind-Beispieldatenbank verwendet.
Achtung: Diese Codebeispiele basieren auf den Beispieldatenbanken der englischsprachigen Versionen von Microsoft SQL Server oder Microsoft Access. Sie können sie nicht mit den deutschsprachigen Beispieldatenbanken von SQL Server oder Access verwenden. Verwenden Sie entweder die englischsprachigen Versionen dieser Datenbanken, oder passen Sie die Codebeispiele so an, dass sie auf die deutschen Beispieldatenbanken und die deutschsprachigen Datenbankobjekte verweisen.
  1. Öffnen Sie Microsoft Visual Studio .NET.
  2. Erstellen Sie ein neues Visual Basic Windows-Anwendungsprojekt. Form1 wird standardmäßig zu dem Projekt hinzugefügt.
  3. Stellen Sie sicher, dass Ihr Projekt eine Referenz auf den System.Data-Namespace enthält. Wenn dies nicht der Fall ist, fügen Sie eine Referenz zu diesem Namespace hinzu.
  4. Setzen Sie eine Command-Schaltfläche auf Form1. Ändern Sie die Name-Eigenschaft der Schaltfläche in btnTest und die Text-Eigenschaft in Test.
  5. Wenden Sie die Imports-Anweisung auf die Namespaces System, System.Data und System.Data.SqlClient an, damit Sie später in Ihrem Code keine Deklarationen in diesen Namespaces bestimmen müssen. Fügen Sie den folgenden Code zum Abschnitt Allgemeine Deklarationen von Form1 hinzu:
    Imports System
    Imports System.Data.OleDb
    Imports System.Data.SqlClient
  6. Fügen Sie den folgenden Code nach dem Bereich "Vom Windows Form-Designer generierter Code" in das Codefenster ein:
        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. Ändern Sie die Verbindungszeichenfolge (myConnString) entsprechend Ihrer Umgebung.
  8. Speichern Sie das Projekt. Klicken Sie im Menü Debuggen auf Starten und führen Sie das Projekt aus.
  9. Klicken Sie auf Testen. Wenn Sie mit einer SQL Server 7.0-Datenbank verbunden sind, erzeugt der Code die oben beschriebene Ausnahme.

    Wenn Sie mit einer SQL Server 2000-Datenbank verbunden sind, wird der Code korrekt ausgeführt und das Meldungsfeld "Erfolgreich aktualisiert" (Updated Successfully) angezeigt.
  10. Um dieses Problem bei SQL Server 7.0 zu beheben, müssen Sie den Aufruf an command.Prepare, der dem Code zum Hinzufügen der Parameter vorausgeht, auskommentieren und anschließend das Projekt erneut ausführen.

Informationsquellen

Weitere Informationen zu ADO.NET-Objekten und -Syntax finden Sie unter dem folgenden Thema in der Microsoft .NET Framework Software Development Kit (SDK)-Dokumentation:
Accessing Data with ADO.NET
http://msdn2.microsoft.com/en-us/library/e80y5yhx(vs.71).aspx


Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.

Eigenschaften

Artikel-ID: 310368 - Geändert am: Montag, 24. Februar 2014 - Version: 1.3
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft ADO .NET (Bestandteil von .NET-Framework)
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Keywords: 
kbnosurvey kbarchive kbnofix kbprb kbgrpdsvbdb kbgrpdsmdac KB310368
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

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