Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Analytics Platform Systeem (PDW)
Belangrijk
SQL Server Native Client (SNAC) wordt niet geleverd met:
- SQL Server 2022 (16.x) en latere versies
- SQL Server Management Studio 19 en latere versies
De SQL Server Native Client (SQLNCLI of SQLNCLI11) en de verouderde Microsoft OLE DB-provider voor SQL Server (SQLOLEDB) worden niet aanbevolen voor de ontwikkeling van nieuwe toepassingen.
Gebruik een van de volgende stuurprogramma's voor nieuwe projecten:
Voor SQLNCLI die als onderdeel van SQL Server Database Engine (versies 2012 tot en met 2019) wordt geleverd, raadpleegt u deze uitzondering voor de levenscyclus van ondersteuning.
SQL Server 2005 (9.x) introduceerde door de gebruiker gedefinieerde types (UDT's). UDT's breiden het SQL-typesysteem uit door je toe te staan objecten en aangepaste datastructuren op te slaan in een SQL Server-database. UDT's kunnen meerdere gegevenstypen bevatten en kunnen gedrag hebben, waarbij ze worden onderscheiden van de traditionele aliasgegevenstypen die bestaan uit één gegevenstype van het SQL Server-systeem. UDT's worden gedefinieerd met behulp van een van de talen die worden ondersteund door de .NET common language runtime (CLR) en verifieerbare code produceren. Dit omvat C# en Visual Basic .NET. De data wordt blootgesteld als velden en eigenschappen van een .NET-klasse of -structuur, en gedragingen worden gedefinieerd door methoden van de klasse of structuur.
Een UDT kan worden gebruikt als kolomdefinitie van een tabel, als variabele in een Transact-SQL batch, of als argument van een Transact-SQL functie of opgeslagen procedure.
OLE DB-provider van SQL Server Native Client
De SQL Server Native Client OLE DB-provider ondersteunt UDT's als binaire types met metadata-informatie, waardoor je UDT's als objecten kunt beheren. UDT-kolommen worden als DBTYPE_UDT blootgesteld, en hun metadata wordt blootgesteld via de kerninterface van OLE DB IColumnRowset en de nieuwe ISSCommandWithParameters-interface .
Opmerking
De IRowsetFind::FindNextRow-methode werkt niet met het UDT-datatype. DB_E_BADCOMPAREOP wordt teruggegeven als de UDT wordt gebruikt als zoekkolomtype.
Databindingen en Dwangen
De volgende tabel beschrijft de binding en coercion die optreedt bij het gebruik van de vermelde datatypes met een SQL Server UDT. UDT-kolommen worden blootgesteld via de SQL Server Native Client OLE DB-provider als DBTYPE_UDT. Je kunt metadata via de juiste schema-rijsets halen, zodat je je eigen gedefinieerde types als objecten kunt beheren.
| Gegevenstype | Naar de server UDT |
Naar de server niet-UDT |
Vanaf Server UDT |
Vanaf Server niet-UDT |
|---|---|---|---|---|
| DBTYPE_UDT | Ondersteund6 | Fout1 | Ondersteund6 | Fout5 |
| DBTYPE_BYTES | Ondersteund6 | N/B2 | Ondersteund6 | N/B2 |
| DBTYPE_WSTR | Ondersteund3,6 | N/B2 | Ondersteund4,6 | N/B2 |
| DBTYPE_BSTR | Ondersteund3,6 | N/B2 | Ondersteund4 | N/B2 |
| DBTYPE_STR | Ondersteund3,6 | N/B2 | Ondersteund4,6 | N/B2 |
| DBTYPE_IUNKNOWN | Niet ondersteund | N/B2 | Niet ondersteund | N/B2 |
| DBTYPE_VARIANT (VT_UI1 | VT_ARRAY) | Ondersteund6 | N/B2 | Ondersteund4 | N/B2 |
| DBTYPE_VARIANT (VT_BSTR) | Ondersteund3,6 | N/B2 | N/A | N/B2 |
1Als een servertype anders dan DBTYPE_UDT is gespecificeerd met ICommandWithParameters::SetParameterInfo en het accessortype is DBTYPE_UDT, treedt er een fout op wanneer de instructie wordt uitgevoerd (DB_E_ERRORSOCCURRED; de parameterstatus is DBSTATUS_E_BADACCESSOR). Anders worden de gegevens naar de server gestuurd, maar de server geeft een foutmelding die aangeeft dat er geen impliciete conversie is van UDT naar het datatype van de parameter.
Arabisch cijferBuiten het bereik van dit onderwerp.
3 Gegevensconversie van hex-string naar binaire data vindt plaats.
4 Gegevensconversie van binaire data naar hex-string vindt plaats.
5Validatie kan plaatsvinden bij het aanmaken van de accessor, of bij het ophalen, waarbij de fout DB_E_ERRORSOCCURRED is, met bindingsstatus ingesteld op DBBINDSTATUS_UNSUPPORTEDCONVERSION.
6BY_REF mag worden gebruikt.
DBTYPE_NULL en DBTYPE_EMPTY kunnen worden gebonden aan invoerparameters, maar niet aan uitvoerparameters of resultaten. Wanneer de status wordt gebonden voor invoerparameters, moet de status worden ingesteld op DBSTATUS_S_ISNULL of DBSTATUS_S_DEFAULT.
DBTYPE_UDT kunnen ook worden omgezet naar DBTYPE_EMPTY en DBTYPE_NULL, maar DBTYPE_NULL en DBTYPE_EMPTY kunnen niet worden omgezet naar DBTYPE_UDT. Dit komt overeen met DBTYPE_BYTES.
Opmerking
Er wordt een nieuwe interface gebruikt voor het omgaan met UDT's als parameters, ISSCommandWithParameters, die overneemt van ICommandWithParameters. Applicaties moeten deze interface gebruiken om ten minste de SSPROP_PARAM_UDT_NAME van de DBPROPSET_SQLSERVERPARAMETER eigenschapsset voor UDT-parameters in te stellen. Als dit niet gebeurt, zal ICommand::Execute DB_E_ERRORSOCCURRED teruggeven. Deze interface en eigenschapsset worden later in dit onderwerp beschreven.
Als een door de gebruiker gedefinieerd type wordt ingevoegd in een kolom die niet groot genoeg is om alle gegevens te bevatten, zal ICommand::Execute S_OK teruggeven met een status van DB_E_ERRORSOCCURRED.
Dataconversies geleverd door OLE DB core services (IDataConvert) zijn niet van toepassing op DBTYPE_UDT. Er worden geen andere bindingen ondersteund.
OLE DB Rowset Toevoegingen en Wijzigingen
SQL Server Native Client voegt nieuwe waarden of wijzigingen toe aan veel van de kern van de OLE DB-schema-rijsets.
De PROCEDURE_PARAMETERS Schema Rowset
De volgende toevoegingen zijn gedaan aan de PROCEDURE_PARAMETERS schema-rijset.
| Kolomnaam | Typologie | Description |
|---|---|---|
| SS_UDT_CATALOGNAME | DBTYPE_WSTR | De driedelige naamidentificatie. |
| SS_UDT_SCHEMANAME | DBTYPE_WSTR | De driedelige naamidentificatie. |
| SS_UDT_NAME | DBTYPE_WSTR | De driedelige naamidentificatie. |
| SS_UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | De Assembly Qualified Name, die de typenaam en alle assembly-identificatie omvat die door de CLR moeten worden genoemd. |
De SQL_ASSEMBLIES Schema Rowset
De SQL Server Native Client OLE DB-provider stelt een nieuwe provider-specifieke schema-rijset bloot die de geregistreerde UDT's beschrijft. De ASSEMBLY-server kan als een DBTYPE_WSTR worden gespecificeerd, maar is niet aanwezig in de rowset. Als dat niet wordt gespecificeerd, zal de rowset standaard naar de huidige server gaan. De SQL_ASSEMBLIES schema-rijset wordt gedefinieerd in de volgende tabel.
| Kolomnaam | Typologie | Description |
|---|---|---|
| ASSEMBLY_CATALOG | DBTYPE_WSTR | De catalogusnaam van de assemblage die het type bevat. |
| ASSEMBLY_SCHEMA | DBTYPE_WSTR | De schemanaam, of eigenaarnaam, van de assembly die het type bevat. Hoewel assemblies worden beperkt door database en niet per schema, hebben ze nog steeds een eigenaar die hier wordt weergegeven. |
| ASSEMBLY_NAME | DBTYPE_WSTR | De naam van de assemblage die het type bevat. |
| ASSEMBLY_ID | DBTYPE_UI4 | De object-id van de assembly die het type bevat. |
| PERMISSION_SET | DBTYPE_WSTR | Een waarde die de reikwijdte van de toegang voor de assembly aangeeft. Waarden zijn onder andere "VEILIG", "EXTERNAL_ACCESS" en "ONVEILIG". |
| ASSEMBLY_BINARY | DBTYPE_BYTES | De binaire representatie van de assemblage. |
De SQL_ASSEMBLIES_ DEPENDENCIES Schema Rowset
SQL Server Native Client OLE DB-provider stelt een nieuwe provider-specifieke schema-rijset bloot die de assembly-afhankelijkheden voor een gespecificeerde server beschrijft. ASSEMBLY_SERVER kan door de aanroeper als een DBTYPE_WSTR worden gespecificeerd, maar is niet aanwezig in de rijset. Als dat niet wordt gespecificeerd, zal de rowset standaard naar de huidige server gaan. De SQL_ASSEMBLY_DEPENDENCIES schema-rijset wordt gedefinieerd in de volgende tabel.
| Kolomnaam | Typologie | Description |
|---|---|---|
| ASSEMBLY_CATALOG | DBTYPE_WSTR | De catalogusnaam van de assemblage die het type bevat. |
| ASSEMBLY_SCHEMA | DBTYPE_WSTR | De schemanaam, of eigenaarnaam, van de assembly die het type bevat. Hoewel assemblies worden begrensd door database en niet per schema, hebben ze nog steeds een eigenaar, wat hier wordt weerspiegeld. |
| ASSEMBLY_ID | DBTYPE_UI4 | De object-id van de assembly. |
| REFERENCED_ASSEMBLY_ID | DBTYPE_UI4 | De object-id van de verwezen assembly. |
De SQL_USER_TYPES Schema Rowset
SQL Server Native Client OLE DB-provider stelt een nieuwe schema-rijset beschikbaar, SQL_USER_TYPES, die beschrijft wanneer de geregistreerde UDT's voor een gespecificeerde server worden toegevoegd. UDT_SERVER moet door de aanroeper als een DBTYPE_WSTR worden gespecificeerd, maar is niet aanwezig in de rijset. De SQL_USER_TYPES schema-rijset wordt gedefinieerd in de volgende tabel.
| Kolomnaam | Typologie | Description |
|---|---|---|
| UDT_CATALOGNAME | DBTYPE_WSTR | Voor UDT-kolommen is deze eigenschap een string die de naam specificeert van de catalogus waarin de UDT is gedefinieerd. |
| UDT_SCHEMANAME | DBTYPE_WSTR | Voor UDT-kolommen is deze eigenschap een string die de naam specificeert van het schema waarin de UDT is gedefinieerd. |
| UDT_NAME | DBTYPE_WSTR | De naam van de vergadering die de UDT-klasse bevat. |
| UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | Volledige typenaam (AQN) bevat typenaam als voorvoegsel namespace indien van toepassing. |
De COLUMNS schema-rijset
Toevoegingen aan de COLUMNS-schema-rijset omvatten de volgende kolommen.
| Kolomnaam | Typologie | Description |
|---|---|---|
| SS_UDT_CATALOGNAME | DBTYPE_WSTR | Voor UDT-kolommen is deze eigenschap een string die de naam specificeert van de catalogus waarin de UDT is gedefinieerd. |
| SS_UDT_SCHEMANAME | DBTYPE_WSTR | Voor UDT-kolommen is deze eigenschap een string die de naam specificeert van het schema waarin de UDT is gedefinieerd. |
| SS_UDT_NAME | DBTYPE_WSTR | De naam van de UDT |
| SS_UDT_ASSEMBLY_TYPENAME | DBTYPE_WSTR | Volledige typenaam (AQN) bevat typenaam als voorvoegsel namespace indien van toepassing. |
OLE DB Property Set toevoegingen en wijzigingen
SQL Server Native Client voegt nieuwe waarden of wijzigingen toe aan veel van de kern van de OLE DB-eigenschappen.
De DBPROPSET_SQLSERVERPARAMETER eigenschapsset
Om UDT's via OLE DB te ondersteunen, implementeert SQL Server Native Client de nieuwe DBPROPSET_SQLSERVERPARAMETER property set die de volgende waarden bevat.
| Naam | Typologie | Description |
|---|---|---|
| SSPROP_PARAM_UDT_CATALOGNAME | DBTYPE_WSTR | De driedelige naamidentificatie. Voor UDT-parameters is deze eigenschap een string die de naam specificeert van de catalogus waarin het door de gebruiker gedefinieerde type wordt gedefinieerd. |
| SSPROP_PARAM_UDT_SCHEMANAME | DBTYPE_WSTR | De driedelige naamidentificatie. Voor UDT-parameters is deze eigenschap een string die de naam specificeert van het schema waarin het door de gebruiker gedefinieerde type wordt gedefinieerd. |
| SSPROP_PARAM_UDT_NAME | DBTYPE_WSTR | De driedelige naamidentificatie. Voor UDT-kolommen is deze eigenschap een string die de naam van het enkele onderdeel van het door de gebruiker gedefinieerde type specificeert. |
SSPROP_PARAM_UDT_NAME is verplicht. SSPROP_PARAM_UDT_CATALOGNAME en SSPROP_PARAM_UDT_SCHEMANAME zijn optioneel. Als een van de eigenschappen verkeerd wordt gespecificeerd, wordt DB_E_ERRORSINCOMMAND teruggegeven. Als zowel SSPROP_PARAM_UDT_CATALOGNAME als SSPROP_PARAM_UDT_SCHEMANAME niet zijn gespecificeerd, moet de UDT worden gedefinieerd in dezelfde database en schema als de tabel. Als de UDT-definitie niet in hetzelfde schema zit als de tabel (maar wel in dezelfde database), dan moet SSPROP_PARAM_UDT_SCHEMANAME worden gespecificeerd. Als de UDT-definitie in een andere database staat, moeten zowel SSPROP_PARAM_UDT_CATALOGNAME als SSPROP_PARAM_UDT_SCHEMANAME worden gespecificeerd.
De DBPROPSET_SQLSERVERCOLUMN eigenschapsset
Om het maken van tabellen in de ITableDefinition-interface te ondersteunen, voegt SQL Server Native Client de volgende drie nieuwe kolommen toe aan de set DBPROPSET_SQLSERVERCOLUMN eigenschappen.
| Naam | Description | Typologie | Description |
|---|---|---|---|
| SSPROP_COL_UDT_CATALOGNAME | UDT_CATALOGNAME | VT_BSTR | Voor kolommen van type DBTYPE_UDT is deze eigenschap een string die de naam specificeert van de catalogus waarin de UDT is gedefinieerd. |
| SSPROP_COL_UDT_SCHEMANAME | UDT_SCHEMANAME | VT_BSTR | Voor kolommen van type DBTYPE_UDT is deze eigenschap een string die de naam specificeert van het schema waarin de UDT is gedefinieerd. |
| SSPROP_COL_UDT_NAME | UDT_NAME | VT_BSTR | Voor kolommen van type DBTYPE_UDT is deze eigenschap een string die de naam van één deel van de UDT specificeert. Voor andere kolomtypen geeft deze eigenschap een lege string terug. |
Opmerking
UDT's komen niet voor in de PROVIDER_TYPES schema-rijset. Alle kolommen hebben lees- en schrijftoegang.
ADO verwijst naar deze eigenschappen door gebruik te maken van de bijbehorende vermelding in de kolom Beschrijving.
SSPROP_COL_UDTNAME is verplicht. SSPROP_COL_UDT_CATALOGNAME en SSPROP_COL_UDT_SCHEMANAME zijn optioneel. Als een van de eigendommen verkeerd is gespecificeerd, wordt DB_E_ERRORSINCOMMAND teruggegeven.
Als noch SSPROP_COL_UDT_CATALOGNAME noch SSPROP_COL_UDT_SCHEMANAME is gespecificeerd, moet de UDT worden gedefinieerd in dezelfde database en schema als de tabel.
Als de UDT-definitie niet in hetzelfde schema zit als de tabel (maar wel in dezelfde database), moet SSPROP_COL_UDT_SCHEMANAME worden gespecificeerd.
Als de UDT-definitie in een andere database staat, moeten zowel SSPROP_COL_UDT_CATALOGNAME als SSPROP_COL_UDT_SCHEMANAME worden gespecificeerd.
OLE DB Interface Toevoegingen en Wijzigingen
SQL Server Native Client voegt nieuwe waarden of wijzigingen toe aan veel van de kerninterfaces van OLE DB.
De ISSCommandWithParameters Interface
Om UDT's via OLE DB te ondersteunen, voert SQL Server Native Client een aantal wijzigingen door, waaronder de toevoeging van de ISSCommandWithParameters-interface . Deze nieuwe interface erft van de kern OLE DB-interface ICommandWithParameters. Naast de drie methoden die zijn overgenomen van ICommandWithParameters; GetParameterInfo, MapParameterNames en SetParameterInfo; ISSCommandWithParameters biedt de methoden GetParameterProperties en SetParameterProperties die worden gebruikt om serverspecifieke datatypes te verwerken.
Opmerking
De ISSCommandWithParameters-interface maakt ook gebruik van de nieuwe SSPARAMPROPS-structuur.
De IColumnsRowset-interface
Naast de ISSCommandWithParameters-interface voegt SQL Server Native Client ook nieuwe waarden toe aan de rowset die wordt teruggegeven door het aanroepen van de IColumnsRowset::GetColumnRowset-methode , inclusief het volgende.
| Kolomnaam | Typologie | Description |
|---|---|---|
| DBCOLUMN_SS_UDT_CATALOGNAME | DBTYPE_WSTR | Een UDT-catalogusnaam-identificatie. |
| DBCOLUMN_SS_UDT_SCHEMANAME | DBTYPE_WSTR | Een UDT-schemanaam-identificatie. |
| DBCOLUMN_SS_UDT_NAME | DBTYPE_WSTR | Een UDT-naamidentificatie. |
| DBCOLUMN_SS_ASSEMBLY_TYPENAME | DBTYPE_WSTR | De naam van de assemblee is gekwalificeerd, die de typenaam en alle assembly-identificatie bevat die door de CLR moeten worden genoemd. |
Je kunt een server UDT-kolom onderscheiden van andere binaire types wanneer de DBCOLUMN_TYPE op DBTYPE_UDT is ingesteld door te kijken naar de hierboven genoemde toegevoegde UDT-metadata. Als die data gedeeltelijk compleet is, is het servertype een UDT. Voor niet-UDT-servertypes worden deze kolommen altijd als NULL teruggegeven.
SQL Server Native Client ODBC Driver
Er zijn een aantal wijzigingen aangebracht in de SQL Server Native Client ODBC-driver om UDT's te ondersteunen. De SQL Server Native Client ODBC-driver koppelt de SQL Server UDT aan SQL_SS_UDT driver-specifieke SQL-datatype-identificatie. UDT-kolommen worden als SQL_SS_UDT gepresenteerd. Als je een UDT-kolom expliciet aan een ander type in een SQL-instructie koppelt door gebruik te maken van de ToString - of ToXMLString-methoden van de UDT of via de CAST/CONVERTE-functie , weerspiegelt het type kolom in de resultaatset het daadwerkelijke type waarin de kolom is omgezet
SQLColAttribute, SQLDescribeParam, SQLGetDescField
Er zijn vier nieuwe driver-specifieke descriptorvelden toegevoegd om extra informatie te bieden voor ofwel een UDT-kolom van een resultaatset, of een UDT-parameter van opgeslagen procedure/geparametriseerde query, die kan worden opgehaald via de SQLColAttribute, SQLDescribeParam en SQLGetDescField-functies .
De vier nieuwe descriptorvelden die zijn toegevoegd zijn SQL_CA_SS_UDT_CATALOG_NAME, SQL_CA_SS_UDT_SCHEMA_NAME, SQL_CA_SS_UDT_TYPE_NAME en SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME.
SQLColumns, SQLProcedureColumns
Daarnaast worden drie nieuwe driverspecifieke kolommen toegevoegd aan de resultaatset die wordt teruggegeven vanuit de SQLColumns - en SQLProcedureColumns-functies om extra informatie te bieden over een UDT-resultaatsetkolom of een UDT-parameter. Deze drie nieuwe kolommen zijn SS_UDT_CATALOG_NAME, SS_UDT_SCHEMA_NAME en SS_UDT_ASSEMBLY_TYPE_NAME.
Ondersteunde conversies
Bij het omzetten van SQL naar C datatypes kunnen SQL_C_WCHAR, SQL_C_BINARY en SQL_C_CHAR allemaal worden omgezet naar SQL_SS_UDT. Let echter op dat binaire gegevens worden omgezet naar een hex-string wanneer men converteert van de SQL_C_WCHAR en SQL_C_CHAR SQL-datatypes.
Bij het omzetten van C- naar SQL-datatypes kunnen SQL_C_WCHAR, SQL_C_BINARY en SQL_C_CHAR allemaal worden omgezet naar SQL_SS_UDT. Let echter op dat binaire gegevens worden omgezet naar een hex-string wanneer men converteert van de SQL_C_WCHAR en SQL_C_CHAR SQL-datatypes.
Zie ook
SQL Server Native Clientfuncties
ISSCommandWithParameters (OLE DB)