SQL Server Native Client Command-parametrar

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Parametrar markeras i kommandotexten med frågetecken. Till exempel är följande SQL-sats markerad för en enda indataparameter:

{call SalesByCategory('Produce', ?)}  

För att förbättra prestandan genom att minska nätverkstrafiken härleder inte den SQL Server ursprungliga klient OLE DB-leverantören automatiskt parameterinformation om inte ICommandWithParameters::GetParameterInfo eller ICommandPrepare::P repare anropas innan ett kommando exekveras. Detta innebär att SQL Server Native Client OLE DB-leverantören inte automatiskt:

  • Verifiera korrektheten hos datatypen som anges med ICommandWithParameters::SetParameterInfo.

  • Mappa från DBTYPEN som anges i accessorbindningsinformationen till rätt SQL Server-datatyp för parametern.

Applikationer kommer att få möjliga fel eller förlust av precision med någon av dessa metoder om de specificerar datatyper som inte är kompatibla med SQL Server-datatypen för parametern.

För att säkerställa att detta inte händer bör applikationen:

  • Säkerställ att pwszDataSourceType matchar SQL Server-datatypen för parametern om du hårdkodar ICommandWithParameters::SetParameterInfo.

  • Säkerställ att DBTYPE-värdet som binds till parametern är av samma typ som SQL Server-datatypen för parametern om du hårdkodar en accessor.

  • Koda applikationen så att den anropar ICommandWithParameters::GetParameterInfo så att leverantören dynamiskt kan hämta SQL Server-datatyperna för parametrarna. Observera att detta orsakar en extra nätverkstur och retur till servern.

Note

Leverantören stöder inte anrop av ICommandWithParameters::GetParameterInfo för någon SQL Server UPDATE eller DELETE sats som innehåller en FROM-sats; för alla SQL-satser som är beroende av en delfråga som innehåller parametrar; för SQL-satser som innehåller parametermarkörer i både uttryck av en jämförelse, lika, eller kvantifierad predikat; eller frågor där en av parametrarna är en parameter till en funktion. När man bearbetar en batch av SQL-satser stöder leverantören inte heller anrop ICommandWithParameters::GetParameterInfo för parametermarkörer i satser efter det första uttrycket i batchen. Kommentarer (/* */) är inte tillåtna i kommandot Transact-SQL.

SQL Server Native Client OLE DB-leverantören stödjer inmatningsparametrar i SQL-satskommandon. Vid procedureanropskommandon stödjer SQL Server Native Client OLE DB-leverantören in-, utmatnings- och in-/utmatningsparametrar. Utdataparametervärden returneras till applikationen antingen vid körning (endast om inga raduppsättningar returneras) eller när alla returnerade raduppsättningar är uttömda av applikationen. För att säkerställa att returnerade värden är giltiga, använd IMultipleResults för att tvinga fram raduppsättningsförbrukning.

Namnen på lagrade procedurparametrar behöver inte specificeras i en DBPARAMBINDINFO-struktur. Använd NULL för värdet på pwszName-medlemmen för att indikera att SQL Server Native Client OLE DB-leverantören ska ignorera parameternamnet och endast använda den ordinal som anges i rgParamOrdinals-medlemmen i ICommandWithParameters::SetParameterInfo. Om kommandotexten innehåller både namngivna och namnlösa parametrar måste alla namnlösa parametrar anges före några namngivna parametrar.

Om namnet på en lagrad procedurparameter anges kontrollerar SQL Server Native Client OLE DB-leverantören namnet för att säkerställa att det är giltigt. SQL Server Native Client OLE DB-leverantören returnerar ett fel när den får ett felaktigt parameternamn från konsumenten.

Note

För att exponera stöd för SQL Server XML och användardefinierade typer (UDT) implementerar SQL Server Native Client OLE DB-leverantören ett nytt ISSCommandWithParameters-gränssnitt.

Se även

Kommandon