2009-09-03 1 views
0

사용자가 해당 테이블에서 2 열을 선택하여 쿼리에 사용할 수 있도록하려고합니다.ODBC에서 열 스키마의 DATA_TYPE이 음수가되는 이유는 무엇입니까?

데이터베이스를 선택하기위한 공급자 및 연결 문자열을 정의합니다. 이 작업은 DBProviderFactory 및 DBConnectionStringBuilder를 사용하여 수행됩니다. 문제는 ODBC 공급자를 사용할 때 다른 공급자 (OLEDB, Sql)가 좋아 보이는 것 같습니다.

스키마를 쿼리하여 테이블을 가져옵니다. 그런 다음 사용자는 표를 선택합니다. 사용자가 하나의 문자열 열과 하나의 숫자 열만 선택할 수 있도록하려면 스키마에서 정의 된 유형을 기반으로 선택한 테이블에 대해 표시된 열을 제한하려고합니다. 이렇게하려면 DataTypes 컬렉션을 쿼리하고 ProviderDbType 열 (숫자 포함) 및 DataType 열 (.NET 시스템 형식 포함)을 사용하여 DbType을 시스템 유형으로 매핑합니다.

그런 다음 사용자가 선택한 테이블의 스키마를 쿼리하고 결과의 DATA_TYPE 열을 기반으로 시스템 유형을 조회하므로 사용자가 문자열 인 하나의 열과 다른 열을 선택할 수있게 할 수 있습니다. 숫자입니다. 내 문제는 대부분의 데이터베이스 형식이 작동하지만 nchar의 경우 ProviderDbType이 11 (DataTypes 스키마 쿼리에서)으로 표시되지만 DATA_TYPE 테이블의 열을 가져올 때 -8 ProviderDbType 열).

열 유형을 올바르게 결정하는 방법은 무엇입니까? 아니면 내가 잘못하고있는거야? 인 unixODBC의 sqlext.h에서

답변

1

:

#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 : ODBC로 데이터를 전달할 때

#define SQL_WCHAR   (-8) 
#define SQL_WVARCHAR  (-9) 
#define SQL_WLONGVARCHAR (-10) 
#define SQL_C_WCHAR   SQL_WCHAR 

는이 사용된다. SMALLINT를보고있는 것일 수 있습니까? 이것은 16 비트 양이며, SQL_WCHAR (Windows, .net 및 Java에서 사용되는 일반 UTF-16 문자)과 동일합니다.