開発環境 Microsoft Visual C++ 2010 Express (SP1)
実行環境 Microsoft Windows XP Home Edition (SP3)
プロジェクトの種類 Win32 コンソール アプリケーション
プロジェクト名 odbctest
アプリケーションの種類 コンソール アプリケーション
追加のオプション 空のプロジェクト
文字セット Unicode


odbccsv.c
#include <fcntl.h>	// _O_WTEXT
#include <io.h>		// _setmode
#include <stdio.h>	// _fileno
#include <Windows.h>
#include <sqlext.h>
#include <tchar.h>
 
#define DRIVER _T("Microsoft Text Driver (*.txt; *.csv)")
#define DATABASE _T("C:\\projects\\vc++\\odbctest")
#define TABLE _T("09TOCHIG.CSV")
 
int main()
{
	SQLHENV henv;	// 環境
	SQLHDBC hdbc;	// 接続
	SQLHSTMT hstmt;	// 命令
	SQLSMALLINT col;
	SQLSMALLINT i;
	SQLSMALLINT datatype;
	SQLTCHAR buf[256];
	SQLLEN len;
	SQLRETURN rc;	// retcode
 
	// BOMなしUTF-16LE
	_setmode(_fileno(stdout), _O_WTEXT);
 
	// データベースへの接続
	rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
	rc = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
	rc = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
	rc = SQLDriverConnect(hdbc, NULL,
		(SQLTCHAR *) _T("driver={") DRIVER _T("}; dbq=") DATABASE,
		SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
	if (!SQL_SUCCEEDED(rc)) {
		return 1;
	}
 
	// 検索
	rc = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	rc = SQLExecDirect(hstmt, (SQLTCHAR *) _T("select * from ") TABLE, SQL_NTS);
	if (!SQL_SUCCEEDED(rc)) {
		return 1;
	}
	rc = SQLNumResultCols(hstmt, &col);
	for (i = 1; i <= col; i++) {
		rc = SQLDescribeCol(hstmt, i, buf, _countof(buf), NULL,
			&datatype, NULL, NULL, NULL);
		_tprintf(_T("%d: %s %d\n"), i, buf, datatype);
		// Text 12 SQL_VARCHAR
		// Byte -6 SQL_TINYINT
	}
	while (1) {
		rc = SQLFetch(hstmt);
		if (rc == SQL_NO_DATA) break;
		if (rc == SQL_ERROR) break;
		for (i = 1; i <= col; i++) {
			SQLGetData(hstmt, i, SQL_C_TCHAR, buf, _countof(buf), &len);
			_tprintf(_T("%s%c"), buf, (i == col) ? _T('\n') : _T(','));
		}
	}
	SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
 
	// 終了処理
	SQLDisconnect(hdbc);
	SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
	SQLFreeHandle(SQL_HANDLE_ENV, henv);
	return 0;
}
 

schema.ini
[09TOCHIG.CSV]
ColNameHeader=False
Format=CSVDelimited
MaxScanRows=25
CharacterSet=OEM
Col1=全国地方公共団体コード Text
Col2=旧郵便番号 Text
Col3=郵便番号 Text
Col4=都道府県名カナ Text
Col5=市区町村名カナ Text
Col6=町域名カナ Text
Col7=都道府県名 Text
Col8=市区町村名 Text
Col9=町域名 Text
Col10=一町域が二以上の郵便番号で表される場合の表示 Byte
Col11=小字毎に番地が起番されている町域の表示 Byte
Col12=丁目を有する町域の場合の表示 Byte
Col13=一つの郵便番号で二以上の町域を表す場合の表示 Byte
Col14=更新の表示 Byte
Col15=変更理由 Byte
 
最終更新:2012年08月31日 12:19