Duże CLR typów zdefiniowanych przez użytkownika (OLE DB)
W tym temacie omówiono zmiany OLE DB w SQL Server Native Client do obsługi dużych language runtime (CLR) użytkownika typowych (UDTs).
Więcej informacji o obsługę dużych CLR UDTs w SQL Server Native Client, zobacz Duże CLR typów zdefiniowanych przez użytkownika.
Format danych
SQL Server Macierzysty klient używa ~ 0 do reprezentowania długość wartości, które są nieograniczonej wielkości dla typów dużych obiektów (LOB). ~ 0 reprezentuje również rozmiar CLR UDTs, które są większe niż 8000 bajtów.
W poniższej tabela przedstawiono mapowanie typu danych i zestawów wierszy w parametrach:
Typ danych programu SQL Server |
Typ danych OLE DB |
Układ pamięci |
Wartość |
---|---|---|---|
CLR UDT |
DBTYPE_UDT |
BYTE [] (tablicę bajtów) |
132 (oledb.h) |
UDT wartości są reprezentowane jako tablice bajtów.Konwersja z ciągów znaków szesnastkowych i są obsługiwane.Wartości literałów są reprezentowane jako ciąg szesnastkowy z prefiksem "0 x".Ciąg szesnastkowy jest tekstowa reprezentacja danych binarnych w podstawa 16.Przykładem jest konwersja z typu serwera varbinary(10) z typem DBTYPE_STR, które wyniki w szesnastkowej reprezentacji 20 znaków, w którym każdej pary znaków reprezentuje pojedynczy bajt.
Właściwości parametru
Zestaw właściwość DBPROPSET_SQLSERVERPARAMETER obsługuje UDTs poprzez OLE DB.Aby uzyskać więcej informacji, zobacz Typy zdefiniowane przez użytkownika.
Właściwości kolumny
Zestaw właściwość DBPROPSET_SQLSERVERCOLUMN obsługuje tworzenie tabel za pomocą OLE DB.Aby uzyskać więcej informacji, zobacz Typy zdefiniowane przez użytkownika.
Mapowanie typu danych w ITableDefinition::CreateTable
Poniższe informacje są używane w DBCOLUMNDESC struktur używane przez ITableDefinition::CreateTable podczas UDT kolumny są wymagane:
Typ danych OLE DB (wType) |
pwszTypeName |
Typ danych programu SQL Server |
rgPropertySets |
---|---|---|---|
DBTYPE_UDT |
Ignorowany |
UDT |
Musi zawierać zestaw właściwość DBPROPSET_SQLSERVERCOLUMN. |
ICommandWithParameters::GetParameterInfo
Informacje są zwracane w strukturze DBPARAMINFO przez prgParamInfo jest następujący:
Typ parametru |
wType |
ulParamSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_ISLONG |
---|---|---|---|---|---|
DBTYPE_UDT (długość mniejszej lub równej 8000 bajtów) |
"DBTYPE_UDT" |
n |
Niezdefiniowany |
Niezdefiniowany |
Wyczyść |
DBTYPE_UDT (długości większej niż 8000 bajtów) |
"DBTYPE_UDT" |
~0 |
Niezdefiniowany |
Niezdefiniowany |
zestaw |
ICommandWithParameters::SetParameterInfo
Informacje zawarte w strukturze DBPARAMBINDINFO musi spełniać następujące warunki:
Typ parametru |
pwszDataSourceType |
ulParamSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_ISLONG |
---|---|---|---|---|---|
DBTYPE_UDT (długość mniejszej lub równej 8000 bajtów) |
DBTYPE_UDT |
n |
ignorowane |
ignorowane |
Musi być zestaw Jeśli parametr jest przekazywane przy użyciu DBTYPE_IUNKNOWN. |
DBTYPE_UDT (długości większej niż 8000 bajtów) |
DBTYPE_UDT |
~0 |
ignorowane |
ignorowane |
ignorowane |
ISSCommandWithParameters
Aplikacje ISSCommandWithParameters uzyskać i zestaw właściwości parametru zdefiniowany w sekcji Właściwości parametru.
IColumnsRowset::GetColumnsRowset
Kolumny, zwracane są następujące:
Typ kolumny |
DBCOLUMN_TYPE |
DBCOLUMN_COLUMNSIZE |
DBCOLUMN_PRECISION |
DBCOLUMN_SCALE |
DBCOLUMN_FLAGS_ISLONG |
DBCOLUMNS_ISSEARCHABLE |
DBCOLUMN_OCTETLENGTH |
---|---|---|---|---|---|---|---|
DBTYPE_UDT (długość mniejszej lub równej 8000 bajtów) |
DBTYPE_UDT |
n |
NULL |
NULL |
Wyczyść |
DB_ALL_EXCEPT_LIKE |
n |
DBTYPE_UDT (długości większej niż 8000 bajtów) |
DBTYPE_UDT |
~0 |
NULL |
NULL |
Zestaw |
DB_ALL_EXCEPT_LIKE |
0 |
Następujące kolumny są również zdefiniowani UDTs:
Identyfikator kolumny |
Typ |
Opis |
---|---|---|
DBCOLUMN_UDT_CATALOGNAME |
DBTYPE_WSTR |
Dla kolumny UDT, nazwę katalogu, w którym zdefiniowano UDT. |
DBCOLUMN_UDT_SCHEMANAME |
DBTYPE_WSTR |
UDT kolumn, nazwa schematu, w którym zdefiniowano UDT. |
DBCOLUMN_UDT_NAME |
DBTYPE_WSTR |
UDT kolumn, nazwa jednej części UDT. |
DBCOLUMN_ASSEMBLY_TYPENAME |
DBTYPE_WSTR |
Dla kolumn UDT pełny wpisz nazwę UDT.Pełna nazwa typu wirtualny plik dziennika umożliwia utworzenia instancji obiektu typu przy użyciu metoda Type.GetType. |
IColumnsInfo::GetColumnInfo
Informacje zwrócone w strukturze DBCOLUMNINFO jest następujący:
Typ parametru |
wType |
ulColumnSize |
bPrecision |
bScale |
dwFlags DBCOLUMNFLAGS_ISLONG |
---|---|---|---|---|---|
DBTYPE_UDT (długość mniejszej lub równej 8000 bajtów) |
DBTYPE_UDT |
n |
~0 |
~0 |
Wyczyść |
DBTYPE_UDT (długości większej niż 8000 bajtów) |
DBTYPE_UDT |
~0 |
~0 |
~0 |
Zestaw |
Zestaw wierszy kolumn (zestawów wierszy schematu)
Dla typów UDT zwracane są następujące wartości kolumna:
Typ kolumny |
DATA_TYPE |
COLUMN_FLAGS DBCOLUMFLAGS_ISLONG |
CHARACTER_OCTET_LENGTH |
---|---|---|---|
DBTYPE_UDT (długość mniejszej lub równej 8000 bajtów) |
DBTYPE_UDT |
Wyczyść |
n |
DBTYPE_UDT (długości większej niż 8000 bajtów) |
DBTYPE_UDT |
Zestaw |
0 |
Następujące dodatkowe kolumny są zdefiniowane dla UDTs:
Identyfikator kolumny |
Typ |
Opis |
---|---|---|
SS_UDT_CATALOGNAME |
DBTYPE_WSTR |
Dla kolumny UDT, nazwę katalogu, w którym zdefiniowano UDT. |
SS_UDT_SCHEMANAME |
DBTYPE_WSTR |
UDT kolumn, nazwa schematu, w którym zdefiniowano UDT. |
SS_UDT_NAME |
DBTYPE_WSTR |
UDT kolumn, nazwa jednej części UDT. |
SS_ASSEMBLY_TYPENAME |
DBTYPE_WSTR |
UDT kolumn to wpisz pełną nazwę UDT.Pełna nazwa typu wirtualny plik dziennika umożliwia utworzenia instancji obiektu typu przy użyciu metoda Type.GetType. |
Dotyczące zestaw wierszy PROCEDURE_PARAMETERS DATA_TYPE zawiera wartości kolumny zestaw zestaw wierszy schematu i TYPE_NAME zawiera UDT.Można zdefiniować dodatkowe tej samej kolumny.
Typów zdefiniowanych przez użytkownika nie pojawi się w zestawie zestaw wierszy schematu PROVIDER_TYPES.
Konwersje i powiązania
Wiązanie danych tpe |
UDT do serwera |
UDT nie do serwera |
UDT z serwera |
Non-UDT z serwera |
---|---|---|---|---|
DBTYPE_UDT |
Obsługiwane (5) |
Błąd (1) |
Obsługiwane (5) |
Błąd (4) |
DBTYPE_BYTES |
Obsługiwane (5) |
Brak |
Obsługiwane (5) |
Brak |
DBTYPE_WSTR |
Obsługiwane (2), (5) |
Brak |
Obsługiwane (3), (5) (6) |
Brak |
DBTYPE_BSTR |
Obsługiwane (2), (5) |
Brak |
Obsługiwane (3), (5) |
Brak |
TYPEM DBTYPE_STR |
Obsługiwane (2), (5) |
Brak |
Obsługiwane (3), (5) |
Brak |
DBTYPE_IUNKNOWN |
Obsługiwane (6) |
Brak |
Obsługiwane (6) |
Brak |
DBTYPE_VARIANT (VT_UI1 | VT_ARRAY) |
Obsługiwane (5) |
Brak |
Obsługiwane (3), (5) |
Brak |
DBTYPE_VARIANT (VT_BSTR) |
Obsługiwane (2), (5) |
Brak |
Brak |
Brak |
Klucz do symboli
Symbol |
Znaczenie |
---|---|
1 |
Jeśli typ serwera, inne niż określona z DBTYPE_UDT ICommandWithParameters::SetParameterInfo i metoda dostępu typ jest DBTYPE_UDT, wystąpi błąd podczas wykonywania instrukcja.Błąd będzie DB_E_ERRORSOCCURRED i stan parametru będzie DBSTATUS_E_BADACCESSOR. Jest błędem określenie parametru typu UDT parametru serwera, który nie jest typ zdefiniowany przez użytkownika. |
2 |
Danych jest konwertowana z ciąg szesnastkowy dane binarne. |
3 |
Danych jest konwertowana z danych binarnych na format szesnastkowy ciąg. |
4 |
Sprawdzanie poprawności może się zdarzyć podczas korzystania z CreateAccessor lub GetNextRows.Błąd jest DB_E_ERRORSOCCURRED.Status wiązania jest zestaw do DBBINDSTATUS_UNSUPPORTEDCONVERSION. |
5 |
BY_REF mogą być używane. |
6 |
Parametry UDT można powiązać jako DBTYPE_IUNKNOWN w DBBINDING.Wskazuje powiązanie z DBTYPE_IUNKNOWN aplikacja będzie przetwarzać dane jako strumień za pomocą ISequentialStream interfejs.Gdy konsument określa wType powiązanie jako typ DBTYPE_IUNKNOWN i odpowiedniej kolumna lub wyjścia parametrów procedura składowana jest UDT, SQL Server Native Client zwróci ISequentialStream.Dla parametru wejściowego dla będzie kwerendy SQL Server Native Client dla ISequentialStream interfejs. Można powiązać nie długość danych UDT podczas używania powiązanie DBTYPE_IUNKNOWN przypadek dużych UDTs.Jednakże długość musi być powiązana dla małych UDTs.Parametr DBTYPE_UDT może być określona jako duże UDT, jeśli spełniony jest jeden lub więcej z następujących czynności:
Wiersz danych powiązanie DBTYPE_IUNKNOWN jest dozwolona tylko dla dużych UDTs.Można sprawdzić, czy kolumna jest duża typu UDT za pomocą IColumnsInfo::GetColumnInfo metoda na Rowset lub Command obiektu IColumnsInfo interfejs.Kolumna DBTYPE_UDT jest dużych kolumny UDT, jeśli spełniony jest jeden lub więcej z następujących czynności:
|
DBTYPE_NULL i DBTYPE_EMPTY można powiązać parametrów wejściowych, ale nie dla parametrów wyjściowych lub wyniki.Powiązany parametrów wejściowych, stan musi być zestaw do DBSTATUS_S_ISNULL, DBTYPE_NULL lub DBSTATUS_S_DEFAULT dla DBTYPE_EMPTY.Nie można użyć DBTYPE_BYREF z DBTYPE_NULL lub DBTYPE_EMPTY.
DBTYPE_UDT można skonwertować także DBTYPE_EMPTY i DBTYPE_NULL.Jednakże DBTYPE_NULL i DBTYPE_EMPTY nie można przekonwertować na DBTYPE_UDT.Jest to zgodne z DBTYPE_BYTES.ISSCommandWithParameters jest używana do procesu UDTs jako parametry.
Konwersje danych dostarczonych przez OLE DB core services (IDataConvert) nie mają zastosowania do DBTYPE_UDT.
Nie inne powiązania są obsługiwane.
Porównywalność dla IRowsetFind
Typy UDT obsługiwane są tylko następujące porównania:
EQ
NE
IGNORUJ
Jeśli nastąpiła innych porównanie zwracany jest DB_E_BADCOMPAREOP.
Obsługa UDTs BCP
Wartości UDT można importowane i eksportowane tylko jako znak lub wartości binarnych.
Zachowanie klienta niższego poziom dla UDTs
UDTs podlegają mapowania typu z niedziałający-poziom klientów, jak następuje:
Wersja klienta |
DBTYPE_UDT (długość mniejszej lub równej 8000 bajtów) |
DBTYPE_UDT (długości większej niż 8000 bajtów) |
---|---|---|
SQL Server 2000 i starsze |
varbinary |
obraz |
SQL Server 2005 |
UDT |
varbinary(max) |
SQL Server 2008 i później |
UDT |
UDT |
Gdy DataTypeCompatibility (SSPROP_INIT_DATATYPECOMPATIBILITY) jest zestaw do "80" dużych typów UDT widoczny dla klientów w taki sam sposób, pojawiają się dla klientów niższego poziomu.