開発環境 |
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