我试图允许用户从该表中选择一个表2列用于查询 .
它们定义提供程序和连接字符串以选择数据库 . 这是使用DBProviderFactory和DBConnectionStringBuilder完成的 . 问题似乎是在使用ODBC提供程序时,其他提供程序(OLEDB,Sql)似乎没问题 .
我查询模式以获取表 . 然后用户选择一个表 . 因为我只希望用户能够选择一个字符串列和一个数字列,我试图根据它们在模式中定义的类型来限制为所选表显示的列 . 为此,我查询DataTypes集合并使用ProviderDbType列(包含数字)和DataType列(包含.Net系统类型)来构建DbType到System类型的映射 .
然后我查询用户已选择的表的模式,并根据结果中的DATA_TYPE列查找系统类型,现在我可以允许用户选择1列为字符串而另一列为数字 . 我的问题是,对于大多数数据库类型,这是有效的,但是对于nchar,ProviderDbType被列为11(在DataTypes模式查询中),但是当我得到表的列时,DATA_TYPE是-8(这不是数字中的数字) ProviderDbType列) .
如何正确确定列的类型?或者我做错了什么?
1 回答
来自unixODBC的sqlext.h:
sqlucode.h:
将数据传递到ODBC时使用这些 . 难道你在看SMALLINT吗?它是一个16位的数量,与SQL_WCHAR(Windows,.net和Java中使用的常规UTF-16字符)相同 .