Почему DATA_TYPE для схемы столбца будет отрицательным в ODBC?

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

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

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

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

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


person Sam Holder    schedule 03.09.2009    source источник


Ответы (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).

person joeforker    schedule 09.09.2009