Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 为什么ODBC中列架构的数据类型为负?_.net_Database_Schema_Odbc - Fatal编程技术网

.net 为什么ODBC中列架构的数据类型为负?

.net 为什么ODBC中列架构的数据类型为负?,.net,database,schema,odbc,.net,Database,Schema,Odbc,我试图允许用户从该表中选择一个表a 2列,以便在查询中使用 它们定义用于选择数据库的提供程序和连接字符串。这是使用DBProviderFactory和DBConnectionStringBuilder完成的。问题似乎是,当使用ODBC提供程序时,其他提供程序(OLEDB、Sql)似乎没有问题 我查询模式以获取表。然后用户选择一个表。由于我只希望用户能够选择一个字符串列和一个数字列,因此我尝试根据模式中定义的类型限制为所选表显示的列。为此,我查询DataTypes集合,并使用ProviderDbT

我试图允许用户从该表中选择一个表a 2列,以便在查询中使用

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

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

然后,我查询用户选择的表的模式,并基于结果中的DATA_TYPE列,查找系统类型,因此现在我可以允许用户选择一列,一列是字符串,另一列是数字。我的问题是,对于大多数数据库类型,这是可行的,但对于nchar,ProviderDbType列为11(在DataTypes架构查询中),但当我获得表的列时,DATA_类型为-8(这不是ProviderDbType列中的数字)


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

来自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字符)相同