Freigeben über


SQL Server Native Client Command Parameters

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Parameter werden im Befehlstext durch ein Fragezeichen markiert. Zum Beispiel wurde die folgende SQL-Anweisung 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 automatisch 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 der Korrektheit des mit ICommandWithParameters::SetParameterInfo angegebenen Datentyps.

  • Zuordnen des in den Accessor-Bindungsinformationen angegebenen DBTYPE zum korrekten SQL Server-Datentyp für den Parameter

Bei Einsatz dieser beiden Methoden können in Anwendungen möglicherweise Fehler oder Genauigkeitsverluste auftreten, wenn Datentypen angegeben werden, die nicht mit dem SQL Server-Datentyp des Parameters kompatibel sind.

Um dies zu vermeiden, sollte die Anwendung Folgendes tun:

  • Sicherstellen, dass pwszDataSourceType dem SQL Server-Datentyp für den Parameter entspricht, wenn ICommandWithParameters::SetParameterInfo fest codiert wird.

  • Sicherstellen, dass der DBTYPE–Wert, der an den Parameter gebunden wird, vom gleichen Typ wie der SQL Server-Datentyp des Parameters ist, wenn ein Accessor fest codiert wird.

  • Aufrufen von ICommandWithParameters::GetParameterInfo, damit der Anbieter die SQL Server-Datentypen der Parameter während der Laufzeit ermitteln kann. Beachten Sie, dass dies einen zusätzlichen Netzwerkroundtrip zum Server bedingt.

Hinweis

Der Anbieter unterstützt den Aufruf von ICommandWithParameters::GetParameterInfo nicht in Verbindung mit SQL Server UPDATE- oder DELETE-Anweisungen, die eine FROM-Klausel enthalten; SQL-Anweisungen, die von einer Unterabfrage mit Parametern abhängen; SQL-Anweisungen, die Parametermarkierungen in beiden Ausdrücken eines Vergleichs oder quantifizierten Prädikats enthalten; oder Abfragen, in denen ein Parameter ein Funktionsparameter ist. Bei der Verarbeitung von Batches von SQL-Anweisungen unterstützt der Anbieter überdies keine Aufrufe von ICommandWithParameters::GetParameterInfo für Parametermarkierungen in Anweisungen, die der ersten Anweisung im Batch folgen. Kommentare (/* */) sind im Transact-SQL-Befehl 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 nach der Ausführung (nur wenn keine Rowsets zurückgegeben werden) oder nach Abschluss der Rowsetverarbeitung durch die Anwendung an die Anwendung zurückgegeben. Um sicherzustellen, dass zurückgegebene Werte gültig sind, verwenden Sie IMultipleResults, um den Einsatz von Rowsets zu erzwingen.

Die Namen der Parameter von gespeicherten Prozeduren 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, dann müssen alle unbenannten Parameter vor den 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 .

Weitere Informationen

Befehle