Dieser Artikel wurde zuvor veröffentlicht unter D310130
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base: 310130
(http://support.microsoft.com/kb/310130/en-us/
)
HOW TO: Execute SQL Parameterized Stored Procedures Using the ODBC .NET Provider and Visual C# .NET
Eine Version dieses Artikels für Microsoft Visual Basic .NET finden Sie unter 309486
(http://support.microsoft.com/kb/309486/EN-US/
)
.
Eine Version dieses Artikels für Microsoft Visual C++ .NET finden Sie unter 310142
(http://support.microsoft.com/kb/310142/EN-US/
)
.
Achtung: Die in diesem Artikel aufgeführten Codebeispiele basieren auf den Beispieldatenbanken der englischsprachigen Versionen von Microsoft SQL Server oder Microsoft Access. Sie können diese Beispiele 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.
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.
Dieser schrittweise aufgebaute Artikel beschreibt, wie Sie eine parametrisierte SQL Server-gespeicherte Prozedur mit dem ODBC .NET Managed Provider und Visual C# .NET aufrufen können.
Obwohl sich die Ausführung einer parametrisierten gespeicherten Prozedur mit dem ODBC .NET-Provider nur geringfügig von der Ausführung der gleichen Prozedur mit dem SQL oder dem OLE DB-Provider unterscheidet, gibt es einen wichtigen Unterschied: die gespeicherte Prozedur muss über die ODBC CALL-Syntax statt über den Namen der gespeicherten Prozedur aufgerufen werden. Weitere Informationen zu dieser CALL-Syntax finden Sie unter dem Thema "Procedure Calls" in der ODBC-Programmer's Reference in der MSDN-Bibliothek.
Beispiele für Aufrufsyntax
Im folgenden sehen Sie ein Beispiel für eine Aufrufsyntax für eine gespeicherte Prozedur in der Northwind-Beispieldatenbank, die einen einzelnen Eingabeparameter erwartet:
{CALL CustOrderHist (?)}
Im folgenden sehen Sie ein Beispiel für die Aufrufsyntax für eine gespeicherte Prozedur, die einen Eingabeparameter erwartet und einen Ausgabeparameter und einen Rückgabewert zurückgibt. Der erste Platzhalter steht für den Rückgabewert:
{? = CALL Procedure1 (?, ?)
Der ODBC .NET Managed Provider verarbeitet Parameter wie der OLE DB-Provider nach der Ordinalposition (nullbasiert) und nicht nach dem Namen.
Projekt testen - Einzelner Eingabeparameter
Wenn nicht bereits erfolgt, downloaden Sie den ODBC. NET Managed Provider von der folgenden Microsoft-Website und installieren Sie ihn:
Starten Sie Visual Studio .NET und erstellen Sie ein neues Visual C# .NET Windows-Anwendungsprojekt mit einem Namen Ihrer Wahl.
Klicken Sie im Menü Projekt auf Verweis hinzufügen und doppelklicken Sie anschließend auf Microsoft.Data.ODBC.dll, um es zu der Liste mit ausgewählten Elementen hinzuzufügen. Schließen Sie das Dialogfeld Verweise.
Fügen Sie ganz oben im Codefenster die folgenden Anweisungen hinzu:
using System.Data;
using Microsoft.Data.Odbc;
Fügen Sie dem Standardformular eine Schaltfläche von der Toolbox hinzu.
Doppelklicken Sie auf die Befehlsschaltfläche, um zu dem Codefenster für das Click-Ereignis der Schaltfläche zu wechseln. Geben oder fügen Sie den folgenden Code in die Click-Ereignisprozedur ein, wobei Sie die SQL Server-Verbindungszeichenfolge wie erforderlich anpassen:
OdbcConnection cn;
OdbcCommand cmd;
OdbcParameter prm;
OdbcDataReader dr;
try {
//Change the connection string to use your SQL Server.
cn = new OdbcConnection("Driver={SQL Server};Server=servername;Database=Northwind;Trusted_Connection=Yes");
//Use ODBC call syntax.
cmd = new OdbcCommand("{call CustOrderHist (?)}", cn);
prm = cmd.Parameters.Add("@CustomerID", OdbcType.Char, 5);
prm.Value = "ALFKI";
cn.Open();
dr = cmd.ExecuteReader();
//List each product.
while (dr.Read())
Console.WriteLine(dr.GetString(0));
//Clean up.
dr.Close();
cn.Close();
}
catch (OdbcException o) {
MessageBox.Show(o.Message.ToString());
}
Führen Sie das Projekt aus. Dieser Code ruft die gespeicherte Prozedur "CustOrderHist" auf, wobei die Kunden-Nr. als einzelner Eingabeparameter übergeben wird, und gibt eine Ergebnismenge zurück. Im Ausgabefenster sollte die Liste der Produkte erscheinen, die der Northwind-Kunde ALFKI bestellt hat.
Hinweis: Drücken Sie [Strg]+[Alt]+[O], um das Ausgabefenster zu öffnen.
Projekt testen - Mehrere Parametertypen
Erstellen Sie mit Query Analyzer die folgende gespeicherte Prozedur in der Northwind-Beispieldatenbank. Diese gespeicherte Prozedur akzeptiert eine Kunden-Nr. als Eingabeparameter und gibt eine Liste der von dem Kunden aufgegebenen Bestellungen, die durchschnittlichen von diesem Kunden bezahlten Frachtkosten pro Bestellung als Ausgabeparameter und die Anzahl der von diesem Kunden aufgegebenen Bestellungen als Rückgabewert zurück.
CREATE PROCEDURE usp_TestParameters
@CustID CHAR(5),
@AvgFreight MONEY OUTPUT
AS
SELECT @AvgFreight = AVG(Freight) FROM Orders WHERE CustomerID = @CustID
SELECT * FROM Orders WHERE CustomerID = @CustID
RETURN @@ROWCOUNT
Wiederholen Sie die oben aufgeführten Schritte 1 bis 6, wobei Sie den folgenden Code in die Click-Ereignisprozedur der Befehlsschaltfläche einfügen:
Führen Sie das Projekt aus. Dieser Code ruft die im obigen Schritt 1 erstellte gespeicherte Prozedur "usp_TestParameters" auf, wobei die Kunden-Nr. als einzelner Eingabeparameter übergeben wird, und gibt eine Ergebnismenge, einen Ausgabeparameter und einen Rückgabewert zurück. Im Ausgabefenster sollten eine Liste der vom Northwind-Kunden ALFKI aufgegebenen Bestellungen, die vom Kunden bezahlten durchschnittlichen Frachtkosten pro Bestellung und die Anzahl der Bestellungen erscheinen.
Hinweis: Drücken Sie [Strg]+[Alt]+[O], um das Ausgabefenster zu öffnen.
Problembehandlung
Die gewöhnlich zum Aufrufen von gespeicherten Prozeduren verwendete ADO-Syntax, bei der der Name der Prozedur allein als Befehlstext dient, kann mit dem ODBC .NET Managed Provider nicht verwendet werden.
Wenn eine gespeicherte Prozedur eine Ergebnismenge zurückgibt, sind der/die Ausgabeparameter und der Rückgabewert erst verfügbar, wenn auf die Ergebnismenge zugegriffen und sie geschlossen wurde. Wenn beispielsweise die Zeile "dr.Close()" in dem zweiten oben aufgeführten Beispiel weggelassen worden wäre, hätten die Werte für den Ausgabeparameter und den Rückgabewert nicht abgerufen werden können.
Der ODBC .NET Managed Provider verarbeitet Parameter wie der OLE DB-Provider nach der Ordinalposition (nullbasiert) und nicht nach dem Namen.
Der ODBC .NET Managed Provider ist nicht in Visual Studio .NET enthalten, sondern muss separat heruntergeladen werden.
Die Informationen in diesem Artikel beziehen sich auf:
Microsoft ADO.NET 1.0
Microsoft ADO.NET 1.1
Microsoft Visual C# .NET 2002 Standard Edition
Microsoft Visual C# .NET 2003 Standard Edition
Keywords:
kbdatabase kbhowtomaster KB310130
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.
Danke! Dieses Feedback hilft uns dabei, die Supportartikel weiter zu verbessern. Weitere Informationen finden Sie auf der Hilfe und Support-Startseite.