首页 文章

为什么列模式的DATA_TYPE在ODBC中是否定的?

提问于
浏览
0

我试图允许用户从该表中选择一个表2列用于查询 .

它们定义提供程序和连接字符串以选择数据库 . 这是使用DBProviderFactory和DBConnectionStringBuilder完成的 . 问题似乎是在使用ODBC提供程序时,其他提供程序(OLEDB,Sql)似乎没问题 .

我查询模式以获取表 . 然后用户选择一个表 . 因为我只希望用户能够选择一个字符串列和一个数字列,我试图根据它们在模式中定义的类型来限制为所选表显示的列 . 为此,我查询DataTypes集合并使用ProviderDbType列(包含数字)和DataType列(包含.Net系统类型)来构建DbType到System类型的映射 .

然后我查询用户已选择的表的模式,并根据结果中的DATA_TYPE列查找系统类型,现在我可以允许用户选择1列为字符串而另一列为数字 . 我的问题是,对于大多数数据库类型,这是有效的,但是对于nchar,ProviderDbType被列为11(在DataTypes模式查询中),但是当我得到表的列时,DATA_TYPE是-8(这不是数字中的数字) ProviderDbType列) .

如何正确确定列的类型?或者我做错了什么?

1 回答

  • 1

    来自unixODBC的sqlext.h:

    #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(Windows,.net和Java中使用的常规UTF-16字符)相同 .

相关问题