Freigeben über


Befehlsparameter

Parameter werden im Befehlstext mit dem Fragezeichenzeichen markiert. Die folgende SQL-Anweisung wird beispielsweise für einen einzelnen Eingabeparameter markiert:

{call SalesByCategory('Produce', ?)}  

Um die Leistung zu verbessern, indem der Netzwerkdatenverkehr reduziert wird, leitet der OLE DB-Anbieter von SQL Server Native Client keine Parameterinformationen ab, es sei denn , ICommandWithParameters::GetParameterInfo oder ICommandPrepare::P repare wird aufgerufen, bevor ein Befehl ausgeführt wird. Dies bedeutet, dass der OLE DB-Anbieter des sql Server Native Client nicht automatisch:

  • Überprüfen Sie die Richtigkeit des mit ICommandWithParameters::SetParameterInfo angegebenen Datentyps.

  • Ordnen Sie den in den Accessorbindungsinformationen angegebenen DBTYPE dem richtigen SQL Server-Datentyp für den Parameter zu.

Anwendungen erhalten mögliche Fehler oder Genauigkeitsverluste mit einer dieser Methoden, wenn sie Datentypen angeben, die nicht mit dem SQL Server-Datentyp des Parameters kompatibel sind.

Um sicherzustellen, dass dies nicht geschieht, sollte die Anwendung:

  • Stellen Sie sicher, dass pwszDataSourceType dem SQL Server-Datentyp für den Parameter entspricht, wenn ICommandWithParameters::SetParameterInfo hartcodiert wird.

  • Stellen Sie sicher, dass der DBTYPE-Wert, der an den Parameter gebunden wird, denselben Typ wie der SQL Server-Datentyp für den Parameter aufweist, wenn ein Accessor hart codiert wird.

  • Codieren Sie die Anwendung, um ICommandWithParameters::GetParameterInfo aufzurufen, damit der Anbieter die SQL Server-Datentypen der Parameter dynamisch abrufen kann. Beachten Sie, dass dies zu einem zusätzlichen Netzwerk-Roundtrip zum Server führt.

Hinweis

Der Anbieter unterstützt das Aufrufen von ICommandWithParameters::GetParameterInfo für jede SQL Server UPDATE- oder DELETE-Anweisung, die eine FROM-Klausel enthält; für jede SQL-Anweisung abhängig von einer Unterabfrage, die Parameter enthält; für SQL-Anweisungen, die Parametermarkierungen in beiden Ausdrücken eines Vergleichs enthalten, z. B. oder quantifiziertes Prädikat; oder Abfragen, bei denen einer der Parameter ein Parameter für eine Funktion ist. Beim Verarbeiten eines Batches von SQL-Anweisungen unterstützt der Anbieter auch das Aufrufen von "ICommandWithParameters::GetParameterInfo " für Parametermarkierungen in Anweisungen nach der ersten Anweisung im Batch nicht. Kommentare (/* */) sind im Befehl Transact-SQL nicht zulässig.

Der OLE DB-Anbieter von SQL Server Native Client unterstützt Eingabeparameter in SQL-Anweisungsbefehlen. Bei Prozeduraufrufbefehlen unterstützt der OLE DB-Anbieter von SQL Server Native Client Eingabe-, Ausgabe- und Eingabe-/Ausgabeparameter. Ausgabeparameterwerte werden entweder bei ausführung an die Anwendung zurückgegeben (nur wenn keine Rowsets zurückgegeben werden) oder wenn alle zurückgegebenen Rowsets von der Anwendung erschöpft sind. Um sicherzustellen, dass zurückgegebene Werte gültig sind, verwenden Sie IMultipleResults , um die Verwendung von Rowset zu erzwingen.

Die Namen gespeicherter Prozedurparameter müssen nicht in einer DBPARAMBINDINFO-Struktur angegeben werden. Verwenden Sie NULL für den Wert des pwszName-Elements , um anzugeben, dass der OLE DB-Anbieter des SQL Server Native Client den Parameternamen ignorieren und nur das Im rgParamOrdinals-Element von ICommandWithParameters::SetParameterInfo angegebene Ordnungszahl verwenden soll. Wenn der Befehlstext sowohl benannte als auch unbenannte Parameter enthält, müssen alle nicht benannten Parameter vor benannten Parametern angegeben werden.

Wenn der Name eines gespeicherten Prozedurparameters angegeben ist, überprüft der OLE DB-Anbieter des SQL Server Native Client den Namen, um sicherzustellen, dass er gültig ist. Der OLE DB-Anbieter des SQL Server Native Client gibt einen Fehler zurück, wenn er einen fehlerhaften Parameternamen vom Consumer empfängt.

Hinweis

Um unterstützung für SQL Server XML und benutzerdefinierte Typen (UDT) verfügbar zu machen, implementiert der OLE DB-Anbieter von SQL Server Native Client eine neue ISSCommandWithParameters-Schnittstelle .

Siehe auch

Befehle