Duże CLR typy zdefiniowane przez użytkownika (OLE DB)
W tym temacie omówiono zmiany OLE DB w SQL Server Macierzysta klient do obsługi dużych wykonywalnych języka wspólnego (CLR) zdefiniowanej przez użytkownika typów (UDTs).
Aby uzyskać więcej informacji na temat obsługi dużych UDTs CLR w SQL Server Klient macierzystym, zobacz Duże CLR Typy definiowane przez użytkownika.
Format danych
SQL Server Macierzysta klient używa ~ 0 do reprezentowania długość wartości, których rozmiar nieograniczony w przypadku dużych obiektów (LOB).Zaczyna się od SQL Server 2008, ~ 0 oznacza także rozmiar UDTs CLR o rozmiarze większym niż 8000 bajtów.
W poniższej tabela przedstawiono mapowania typów danych, parametry i zestawów wierszy:
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 w postaci tablic bajtowych.Podczas konwersji z ciągów znaków szesnastkowych i są obsługiwane.Wartości są reprezentowane jako ciąg szesnastkowy z prefiksem "0 x".Ciąg szesnastkowy jest tekstowa reprezentacja danych binarnych w podstawa 16).Przykład połączenia jest konwersja z typu serwera varbinary(10) Aby DBTYPE_STR, które powoduje w kodzie szesnastkowym 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 za pomocą OLE DB.Aby uzyskać więcej informacji zobaczZa pomocą Typy definiowane przez użytkownika.
Właściwości kolumna
Zestaw właściwość DBPROPSET_SQLSERVERCOLUMN obsługuje tworzenie tabel za pomocą OLE DB.Aby uzyskać więcej informacji zobaczZa pomocą Typy definiowane przez użytkownika.
Mapowanie typu danych w ITableDefinition::CreateTable
Poniższe informacje są używane w DBCOLUMNDESC struktury używane przez ITableDefinition::CreateTable Kiedy 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 zwrócone w strukturze DBPARAMINFO za pośrednictwem prgParamInfo jest w następujący sposób:
Typ parametru |
wType |
ulParamSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_ISLONG |
---|---|---|---|---|---|
DBTYPE_UDT (długość mniejsze lub równe do 8000 bajtów) |
"DBTYPE_UDT" |
n |
nie zdefiniowano |
nie zdefiniowano |
Usuń zaznaczenie |
DBTYPE_UDT (długości większej niż 8000 bajtów) |
"DBTYPE_UDT" |
~0 |
nie zdefiniowano |
nie zdefiniowano |
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ść mniejsze lub równe do 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
Użyj aplikacji ISSCommandWithParameters pobieranie i ustawianie właściwości parametrów określonych w sekcji Właściwości parametru.
IColumnsRowset::GetColumnsRowset
Kolumny, zwracane są następujące:
Typ kolumna |
DBCOLUMN_TYPE |
DBCOLUMN_COLUMNSIZE |
DBCOLUMN_PRECISION |
DBCOLUMN_SCALE |
DBCOLUMN_FLAGS_ISLONG |
DBCOLUMNS_ISSEARCHABLE |
DBCOLUMN_OCTETLENGTH |
---|---|---|---|---|---|---|---|
DBTYPE_UDT (długość mniejsze lub równe do 8000 bajtów) |
DBTYPE_UDT |
n |
WARTOŚCI NULL |
WARTOŚCI NULL |
Odwołania do urządzenie źródłowe podraportów i dane z ścieżki względne nie są obsługiwane przy użyciu tej metoda. |
DB_ALL_EXCEPT_LIKE |
n |
DBTYPE_UDT (długości większej niż 8000 bajtów) |
DBTYPE_UDT |
~0 |
WARTOŚCI NULL |
WARTOŚCI NULL |
Zestaw |
DB_ALL_EXCEPT_LIKE |
0 |
Następujące kolumny są również zdefiniowani UDTs:
Identyfikator kolumna |
Typ |
Description |
---|---|---|
DBCOLUMN_UDT_CATALOGNAME |
DBTYPE_WSTR |
W wypadku kolumn UDT, nazwę katalogu, w którym jest zdefiniowana UDT. |
DBCOLUMN_UDT_SCHEMANAME |
DBTYPE_WSTR |
W przypadku kolumn UDT nazwę schematu, gdzie zdefiniowana jest UDT. |
DBCOLUMN_UDT_NAME |
DBTYPE_WSTR |
W przypadku kolumn UDT nazwę jednej części UDT. |
DBCOLUMN_ASSEMBLY_TYPENAME |
DBTYPE_WSTR |
W przypadku kolumn UDT pełny wpisz nazwę UDT.W pełni kwalifikowana nazwa typu wirtualny plik dziennika służy do tworzenia wystąpienia obiektu tego typu przy użyciu metoda Type.GetType. |
IColumnsInfo::GetColumnInfo
Informacje zwrócone w strukturze DBCOLUMNINFO jest następująca:
Typ parametru |
wType |
ulColumnSize |
bPrecision |
bScale |
dwFlags DBCOLUMNFLAGS_ISLONG |
---|---|---|---|---|---|
DBTYPE_UDT (długość mniejsze lub równe do 8000 bajtów) |
DBTYPE_UDT |
n |
~0 |
~0 |
Odwołania do urządzenie źródłowe podraportów i dane z ścieżki względne nie są obsługiwane przy użyciu tej metoda. |
DBTYPE_UDT (długości większej niż 8000 bajtów) |
DBTYPE_UDT |
~0 |
~0 |
~0 |
Zestaw |
Zestaw wierszy COLUMNS (zestawów wierszy schematu)
Dla typów UDT zwracane są następujące wartości kolumna:
Typ kolumna |
DATA_TYPE |
COLUMN_FLAGS DBCOLUMFLAGS_ISLONG |
CHARACTER_OCTET_LENGTH |
---|---|---|---|
DBTYPE_UDT (długość mniejsze lub równe do 8000 bajtów) |
DBTYPE_UDT |
Odwołania do urządzenie źródłowe podraportów i dane z ścieżki względne nie są obsługiwane przy użyciu tej metoda. |
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 kolumna |
Typ |
Description |
---|---|---|
SS_UDT_CATALOGNAME |
DBTYPE_WSTR |
W wypadku kolumn UDT, nazwę katalogu, w którym jest zdefiniowana UDT. |
SS_UDT_SCHEMANAME |
DBTYPE_WSTR |
W przypadku kolumn UDT nazwę schematu, gdzie zdefiniowana jest UDT. |
SS_UDT_NAME |
DBTYPE_WSTR |
W przypadku kolumn UDT nazwę jednej części UDT. |
SS_ASSEMBLY_TYPENAME |
DBTYPE_WSTR |
W przypadku kolumn UDT jest wpisz pełną nazwę UDT.W pełni kwalifikowana nazwa typu wirtualny plik dziennika służy do tworzenia wystąpienia obiektu tego typu przy użyciu metoda Type.GetType. |
W odniesieniu do wierszy PROCEDURE_PARAMETERS DATA_TYPE zawiera te same wartości jak COLUMNS zestaw wierszy schematu, a TYPE_NAME UDT.Można zdefiniować dodatkowe tej samej kolumny.
W przypadku typów zdefiniowanych przez użytkownika nie pojawi się w zestawie zestaw wierszy PROVIDER_TYPES schematu.
Powiązania i Conversions
wiązanie danych tpe |
UDT do serwera |
UDT nie do serwera |
UDT z serwera |
UDT nie z serwera |
---|---|---|---|---|
DBTYPE_UDT |
Obsługiwane (5) |
Wystąpił błąd (1) |
Obsługiwane (5) |
Wystąpił błąd (4) |
DBTYPE_BYTES |
Obsługiwane (5) |
NIE DOTYCZY |
Obsługiwane (5) |
NIE DOTYCZY |
DBTYPE_WSTR |
Obsługiwane [2], [5] |
NIE DOTYCZY |
Obsługiwane [3], [5], [6] |
NIE DOTYCZY |
DBTYPE_BSTR |
Obsługiwane [2], [5] |
NIE DOTYCZY |
Obsługiwane [3], [5] |
NIE DOTYCZY |
DBTYPE_STR |
Obsługiwane [2], [5] |
NIE DOTYCZY |
Obsługiwane [3], [5] |
NIE DOTYCZY |
DBTYPE_IUNKNOWN |
Obsługiwane (6) |
NIE DOTYCZY |
Obsługiwane (6) |
NIE DOTYCZY |
DBTYPE_VARIANT (VT_UI1 | VT_ARRAY) |
Obsługiwane (5) |
NIE DOTYCZY |
Obsługiwane [3], [5] |
NIE DOTYCZY |
DBTYPE_VARIANT (VT_BSTR) |
Obsługiwane [2], [5] |
NIE DOTYCZY |
NIE DOTYCZY |
NIE DOTYCZY |
Klucz do symboli
Symbol |
Znaczenie |
---|---|
1 |
Jeśli na serwerze innym niż DBTYPE_UDT jest określany za pomocą ICommandWithParameters::SetParameterInfo oraz typ dostępu jest DBTYPE_UDT, wystąpi błąd, gdy jest wykonywane w instrukcja.Ten błąd będzie DB_E_ERRORSOCCURRED i stan parametru będzie DBSTATUS_E_BADACCESSOR. Jest błędem do określenia parametru typu UDT parametru serwera, który nie jest UDT. |
2 |
Danych jest konwertowana z ciąg szesnastkowy dane binarne. |
3 |
Danych jest konwertowana z binarne dane szesnastkowe ciąg znaków. |
4 |
Sprawdzanie poprawności może się zdarzyć, gdy za pomocą CreateAccessor or GetNextRows.Błąd jest DB_E_ERRORSOCCURRED.Wiązanie stanu jest zestaw do DBBINDSTATUS_UNSUPPORTEDCONVERSION. |
5 |
BY_REF mogą być używane. |
6 |
Parametry UDT mogą być powiązane jako DBTYPE_IUNKNOWN w DBBINDING.wiązanie z DBTYPE_IUNKNOWN wskazuje, że aplikacja chce, aby przetwarzać dane jako strumień przy użyciu ISequentialStream interfejs. Kiedy klient określa wType w wiązanie jako typ DBTYPE_IUNKNOWN i odpowiadające im kolumna lub dane wyjściowe parametrów procedura przechowywana jest UDT, SQL Server Native Client zwróci ISequentialStream. Dla parametru wejściowego dla będzie kwerendy SQL Server Native klient dla ISequentialStream interfejs. Można powiązać nie UDT danych podczas korzystania z DBTYPE_IUNKNOWN wiązanie, w odniesieniu do dużej UDTs.Jednak długość musi być powiązana dla małych UDTs.Parametr DBTYPE_UDT może być określony jako duże UDT, jeśli spełniony jest jeden lub więcej z następujących czynności:
Wiersz danych wiązanie DBTYPE_IUNKNOWN jest dozwolona tylko dla dużych UDTs.Możesz dowiedzieć się, czy kolumna ma duże czcionki UDT przy użyciu IColumnsInfo::GetColumnInfo Metoda Rowset lub Command obiektu IColumnsInfo interfejs. Kolumna DBTYPE_UDT jest kolumną UDT duże, jeśli spełniony jest jeden lub więcej z następujących czynności:
|
DBTYPE_NULL i DBTYPE_EMPTY mogą być powiązane parametrów wejściowych, ale nie dla parametrów wyjściowych lub wyniki.Kiedy związana dla 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 DBTYPE_NULL lub DBTYPE_EMPTY.
DBTYPE_UDT można skonwertować także DBTYPE_EMPTY i DBTYPE_NULL.Jednak DBTYPE_NULL i DBTYPE_EMPTY nie można przekonwertować na DBTYPE_UDT.Jest to zgodne z DBTYPE_BYTES.ISSCommandWithParameters jest używane do przetwarzania UDTs jako parametry.
Podczas konwersji danych dostarczanych przez (usług) podstawowych baz danych OLEIDataConvert) nie są stosowane do DBTYPE_UDT.
Inne powiązania nie są obsługiwane.
Porównywalności dla IRowsetFind
Dla typów UDT obsługiwane są tylko następujące porównania:
EQ
NE
IGNORUJ
Jeżeli podejmowana jest próba inne porównania DB_E_BADCOMPAREOP jest zwracany.
Obsługa UDTs BCP
UDT wartości mogą być importowane i eksportowane tylko jako znak lub wartości binarnych.
niedziałający-Zachowań klienta poziom dla UDTs
UDTs podlegają mapowania typu z niedziałający-poziom klientów, w następujący sposób:
Wersja kliencka |
DBTYPE_UDT (długość mniejsze lub równe do 8000 bajtów) |
DBTYPE_UDT (długości większej niż 8000 bajtów) |
---|---|---|
Program SQL Server 2000 i starsze |
varbinary |
obraz |
SQL Server 2005 |
UDT |
varbinary(max) |
SQL Server 2008 |
UDT |
UDT |
Kiedy DataTypeCompatibility(SSPROP_INIT_DATATYPECOMPATIBILITY) jest ustawiona na "80", duże typów UDT widoczny dla klientów w taki sam sposób, w jaki pojawiają się w przypadku klientów niskiego poziom.