2009-09-03 3 views
0

J'essaie de permettre à un utilisateur de sélectionner une table à 2 colonnes de cette table pour l'utiliser dans une requête.Pourquoi DATA_TYPE pour le schéma de colonne serait-il négatif dans ODBC?

Ils définissent le fournisseur et la chaîne de connexion pour choisir la base de données. Ceci est fait en utilisant DBProviderFactory et DBConnectionStringBuilder. Le problème semble être lors de l'utilisation du fournisseur ODBC, d'autres fournisseurs (OLEDB, Sql) semblent ok.

J'interroge le schéma pour obtenir les tables. L'utilisateur choisit ensuite une table. Comme je veux seulement que l'utilisateur puisse choisir une colonne de chaîne et une colonne numérique, j'essaye de limiter les colonnes affichées pour la table choisie en fonction de leur type défini dans le schéma. Pour ce faire, j'interroge la collection DataTypes et utilise la colonne ProviderDbType (qui contient un nombre) et la colonne DataType (qui contient le type de système .Net) pour créer une carte de type DbType à System. Je demande ensuite le schéma pour la table que l'utilisateur a choisi et basé sur la colonne DATA_TYPE dans le résultat, recherche le type de système, maintenant je peux permettre à l'utilisateur de choisir 1 colonne qui est une chaîne et une autre qui est numérique. Mon problème est que pour la plupart des types de base de données cela fonctionne, mais pour nchar le ProviderDbType est listé comme 11 (dans la requête schéma DataTypes), mais quand j'obtiens les colonnes de la table le DATA_TYPE est -8 (qui n'est pas un nombre dans le Colonne ProviderDbType).

Comment puis-je déterminer correctement le type de la colonne? Ou est-ce que je fais quelque chose de mal?

Répondre

1

Du sqlext.h de 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 

Ils sont utilisés lorsque les données passant dans ODBC. Se pourrait-il que vous regardiez un SMALLINT? C'est une quantité de 16 bits, identique à un SQL_WCHAR (un caractère UTF-16 standard utilisé dans Windows, .net et Java).

Questions connexes