Udostępnij za pośrednictwem


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:

  • ulParamParamSize jest ~ 0.

  • Jest DBPARAMFLAGS_ISLONG zestaw w strukturze DBPARAMBINDINFO.

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:

  • Flaga DBCOLUMNFLAGS_ISLONG jest zestaw na dwFlags element członkowski członkowski DBCOLUMNINFO struktury

  • ulColumnSize element członkowski członkowski DBCOLUMNINFO jest ~ 0.

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.