2009-09-03 2 views
0

Я пытаюсь разрешить пользователю выбирать таблицу из двух столбцов из этой таблицы для использования в запросе.Зачем DATA_TYPE для схемы столбцов быть отрицательным в ODBC?

Они определяют поставщик и строку подключения для выбора базы данных. Это делается с использованием DBProviderFactory и DBConnectionStringBuilder. Проблема заключается в том, что при использовании поставщика ODBC другие поставщики (OLEDB, Sql) выглядят нормально.

Я запрашиваю схему, чтобы получить таблицы. Затем пользователь выбирает таблицу. Поскольку я только хочу, чтобы пользователь мог выбрать один столбец строки и один числовой столбец, я пытаюсь ограничить столбцы, отображаемые для выбранной таблицы, в зависимости от их определенного типа в схеме. Для этого я запрашиваю коллекцию DataTypes и использую столбец ProviderDbType (который содержит число) и столбец DataType (который содержит тип системы .Net) для построения карты типов DbType для систем.

Затем я запрашиваю схему для выбранной пользователем таблицы и на основании столбца DATA_TYPE в результате просматривает тип системы, поэтому теперь я могу позволить пользователю выбрать 1 столбец, который является строкой, а другой, который является числовым. Моя проблема заключается в том, что для большинства типов баз данных это работает, но для nchar ProviderDbType указан как 11 (в запросе схемы DataTypes), но когда я получаю столбцы таблицы, DATA_TYPE -8 (который не является числом в Столбец ProviderDbType).

Как я могу правильно определить тип столбца? Или я делаю что-то неправильно?

ответ

1

От sqlext.h UnixODBC в:

#define SQL_IS_POINTER       (-4) 
#define SQL_IS_UINTEGER       (-5) 
#define SQL_IS_INTEGER       (-6) 
#define SQL_IS_USMALLINT      (-7) 
#define SQL_IS_SMALLINT       (-8) 

sqlucode.h:

#define SQL_WCHAR   (-8) 
#define SQL_WVARCHAR  (-9) 
#define SQL_WLONGVARCHAR (-10) 
#define SQL_C_WCHAR   SQL_WCHAR 

Они используются при передаче данных в ODBC. Может быть, вы смотрите на SMALLINT? Это 16-разрядное количество, то же, что и SQL_WCHAR (обычный символ UTF-16, используемый в Windows, .net и Java).