Udostępnij za pośrednictwem


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:

  • ulParamParamSize jest ~ 0.

  • DBPARAMFLAGS_ISLONG jest zestaw w strukturze DBPARAMBINDINFO.

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:

  • Flaga DBCOLUMNFLAGS_ISLONG jest zestaw na dwFlags Członkowskie struktury DBCOLUMNINFO

  • ulColumnSize element członkowskiDBCOLUMNINFO jest ~ 0.

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.