Archive for the ‘ODBC’ Category

  1. Hello, ODBC(PHP) World!

    Posted on 9月 30th, 2012 by cx20

    ODBC

    ODBC(Open Database Connectivity)は、マイクロソフト社が提唱した DBMS 接続用の API 仕様である。
    DBMS の差異は ODBC ドライバによって吸収される為、ODBC の手順にしたがってプログラムを作成すれば、基本的な差異を意識せず、プログラムすることができる。

    ODBCドライバ ファイル
    Microsoft Access Driver (*.mdb) ODBCJT32.DLL
    Microsoft Text Driver (*.txt; *.csv) ODBCJT32.DLL
    Microsoft Excel Driver (*.xls) ODBCJT32.DLL
    Microsoft dBase Driver (*.dbf) ODBCJT32.DLL
    Microsoft ODBC for Oracle MSORCL32.DLL
    Microsoft Paradox Driver (*.db ) ODBCJT32.DLL
    SQL Server SQLSRV32.DLL
    Microsoft Access Driver (*.mdb, *.accdb) ACEODBC.DLL
    SQL Server Native Client 10.0 SQLNCLI10.DLL

    ソースコード(PHP + ODBC + SQL Server)

    <?php
    $cn = odbc_connect("Driver={SQL Server};Server=(local)", "sa", "P@ssW0rd");
    $rs = odbc_exec($cn, "SELECT 'Hello, ODBC World' AS Message");
     
    while (odbc_fetch_row($rs))
    {
        $result = odbc_result($rs, "Message");
        echo "Message", "n";
        echo "-------------------n";
        echo $result, "n";
    }
    odbc_close($cn);
    ?>

    実行方法(Windows)

    C:¥> php -f hello.php

    実行結果

    Message
    ------------------
    Hello, ODBC World!
  2. Hello, ODBC(Python) World!

    Posted on 9月 26th, 2012 by cx20

    DB API

    ODBC(Open Database Connectivity)は、マイクロソフト社が提唱した DBMS 接続用の API 仕様である。
    DBMS の差異は ODBC ドライバによって吸収される為、ODBC の手順にしたがってプログラムを作成すれば、基本的な差異を意識せず、プログラムすることができる。

    ODBCドライバ ファイル
    Microsoft Access Driver (*.mdb) ODBCJT32.DLL
    Microsoft Text Driver (*.txt; *.csv) ODBCJT32.DLL
    Microsoft Excel Driver (*.xls) ODBCJT32.DLL
    Microsoft dBase Driver (*.dbf) ODBCJT32.DLL
    Microsoft ODBC for Oracle MSORCL32.DLL
    Microsoft Paradox Driver (*.db ) ODBCJT32.DLL
    SQL Server SQLSRV32.DLL
    Microsoft Access Driver (*.mdb, *.accdb) ACEODBC.DLL
    SQL Server Native Client 10.0 SQLNCLI10.DLL

    Python DB API は Python 向けの Database Interface(API)である。
    ODBC ドライバを介することで、様々な DBMS への接続が可能となっている。

    ソースコード(Python + DB API + ODBC + SQL Server)

    import pyodbc
     
    cn = pyodbc.connect("DRIVER={SQL Server};SERVER=(local);DATABASE=master;UID=sa;PWD=P@ssW0rd")
    cur = cn.cursor()
    cur.execute("SELECT 'Hello, ODBC World!' AS Message")
    rows = cur.fetchall()
     
    for row in rows:
        print "Message"
        print "-------------------"
        print row[0]
     
    cur.close()
    cn.close()

    実行方法(Windows)

    C:¥> python hello.py

    実行結果

    Message
    -----------------
    Hello, ODBC World!
  3. Hello, ODBC(Ruby) World!

    Posted on 9月 23rd, 2012 by cx20

    DBI

    ODBC(Open Database Connectivity)は、マイクロソフト社が提唱した DBMS 接続用の API 仕様である。
    DBMS の差異は ODBC ドライバによって吸収される為、ODBC の手順にしたがってプログラムを作成すれば、基本的な差異を意識せず、プログラムすることができる。

    ODBCドライバ ファイル
    Microsoft Access Driver (*.mdb) ODBCJT32.DLL
    Microsoft Text Driver (*.txt; *.csv) ODBCJT32.DLL
    Microsoft Excel Driver (*.xls) ODBCJT32.DLL
    Microsoft dBase Driver (*.dbf) ODBCJT32.DLL
    Microsoft ODBC for Oracle MSORCL32.DLL
    Microsoft Paradox Driver (*.db ) ODBCJT32.DLL
    SQL Server SQLSRV32.DLL
    Microsoft Access Driver (*.mdb, *.accdb) ACEODBC.DLL
    SQL Server Native Client 10.0 SQLNCLI10.DLL

    DBI は Ruby 向けの Database Interface(API)である。
    DBI 用 ODBC ドライバを介することで、様々な DBMS への接続が可能となっている。

    ソースコード(Ruby + DBI + ODBC + SQL Server)

    require 'rubygems'
    require "dbi"
    dbh = DBI.connect("DBI:ODBC:Driver={SQL Server};Server=(local);DATABASE=master", "sa", "P@ssW0rd")
    sth = dbh.prepare("SELECT 'Hello, DBI World' AS Message")
    sth.execute()
    while row = sth.fetch do
        print "Message", "n";
        print "-------------------n";
        print row[0]
    end
    sth.finish
    dbh.disconnect

    ライブラリ導入方法

    C:¥> gem install dbi
    C:¥> gem install dbd-odbc

    以下のエラーが出る場合は、odbc.so と odbc_utf8.so が足りていない可能性がある為、ODBC Binding for Ruby より i386-msvcrt-ruby-odbc.zip を入手し、%RUBY_HOME%librubysite_ruby1.8i386-msvcrt にコピーする必要がある。

    C:/ruby-1.8/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbi.rb:300:in `load_driver': Unable to load driver 'ODBC' (underlying error: uninitialized constant DBI::DBD::ODBC) (DBI::InterfaceError)
            from C:/ruby-1.8/lib/ruby/1.8/monitor.rb:242:in `synchronize'
            from C:/ruby-1.8/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbi.rb:242:in `load_driver'
            from C:/ruby-1.8/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbi.rb:160:in `_get_full_driver'
            from C:/ruby-1.8/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbi.rb:145:in `connect'
            from hello.rb:3

    なお、2012.09 現在、1.9 版のライブラリは提供されていない模様。

    実行方法(Windows)

    C:¥> ruby hello.rb

    実行結果

    Message
    -----------------
    Hello, DBI World!
  4. Hello, ODBC(Perl) World!

    Posted on 9月 20th, 2012 by cx20

    ODBC

    ODBC(Open Database Connectivity)は、マイクロソフト社が提唱した DBMS 接続用の API 仕様である。
    DBMS の差異は ODBC ドライバによって吸収される為、ODBC の手順にしたがってプログラムを作成すれば、基本的な差異を意識せず、プログラムすることができる。

    ODBCドライバ ファイル
    Microsoft Access Driver (*.mdb) ODBCJT32.DLL
    Microsoft Text Driver (*.txt; *.csv) ODBCJT32.DLL
    Microsoft Excel Driver (*.xls) ODBCJT32.DLL
    Microsoft dBase Driver (*.dbf) ODBCJT32.DLL
    Microsoft ODBC for Oracle MSORCL32.DLL
    Microsoft Paradox Driver (*.db ) ODBCJT32.DLL
    SQL Server SQLSRV32.DLL
    Microsoft Access Driver (*.mdb, *.accdb) ACEODBC.DLL
    SQL Server Native Client 10.0 SQLNCLI10.DLL

    ソースコード(Perl + ODBC + SQL Server)

    use strict;
    use Win32::ODBC;
     
    my $db = Win32::ODBC->new('Driver={SQL Server};Server=(local);UID=sa;PWD=P@ssW0rd');
    $db->Sql("SELECT 'Hello, ODBC World' AS Message");
     
    while ($db->FetchRow) {
        my %row = $db->DataHash;
        print "Message", "n";
        print "-------------------n";
        print $row{Message}, "n";
    }
    $db->Close();

    ソースコード(Perl + ODBC + MySQL)

    use strict;
    use Win32::ODBC;
     
    my $db = Win32::ODBC->new('Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd');
    $db->Sql("SELECT 'Hello, ODBC World' AS Message");
     
    while ($db->FetchRow) {
        my %row = $db->DataHash;
        print "Message", "n";
        print "-------------------n";
        print $row{Message}, "n";
    }
    $db->Close();

    実行方法(Windows)

    C:¥> perl hello.pl

    実行結果

    Message
    ------------------
    Hello, ODBC World!
  5. Hello, ODBC(MFC) World!

    Posted on 3月 25th, 2012 by cx20

    ODBC(MFC)

    ODBC(Open Database Connectivity)は、マイクロソフト社が提唱した DBMS 接続用の API 仕様である。
    DBMS の差異は ODBC ドライバによって吸収される為、ODBC の手順にしたがってプログラムを作成すれば、基本的な差異を意識せず、プログラムすることができる。

    ODBCドライバ ファイル
    Microsoft Access Driver (*.mdb) ODBCJT32.DLL
    Microsoft Text Driver (*.txt; *.csv) ODBCJT32.DLL
    Microsoft Excel Driver (*.xls) ODBCJT32.DLL
    Microsoft dBase Driver (*.dbf) ODBCJT32.DLL
    Microsoft ODBC for Oracle MSORCL32.DLL
    Microsoft Paradox Driver (*.db ) ODBCJT32.DLL
    SQL Server SQLSRV32.DLL
    Microsoft Access Driver (*.mdb, *.accdb) ACEODBC.DLL
    SQL Server Native Client 10.0 SQLNCLI10.DLL

    MFC ODBC クラス は、Visual C++ の ODBC クラスライブラリである。

    ソースコード(VC + MFC + ODBC + Jet データベース)

    #include <afx.h>
    #include <afxdb.h>
     
    int _tmain( int argc, TCHAR* argv[] )
    {
        CDatabase db;
     
        CString strCon = _T("Driver={Microsoft Access Driver (*.mdb)};DBQ=hello.mdb");
        CString strSQL = _T("SELECT 'Hello, ODBC(MFC) World!' AS Message");
     
        db.OpenEx( strCon );
        CRecordset rs( &db );
        rs.Open( CRecordset::forwardOnly, strSQL );
     
        CString strMessage;
     
        while( !rs.IsEOF() )
        {
            rs.GetFieldValue( (short)0, strMessage );
            _tprintf( _T("%sn"), (LPCTSTR)strMessage );
            rs.MoveNext();
        }
        rs.Close();
        db.Close();
     
        return 0;
    }

    ソースコード(VC + MFC + ODBC + ACE データベース)

    #include <afx.h>
    #include <afxdb.h>
     
    int _tmain( int argc, TCHAR* argv[] )
    {
        CDatabase db;
     
        CString strCon = _T("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=.\hello.accdb");
        CString strSQL = _T("SELECT 'Hello, ODBC World!' AS Message");
     
        db.OpenEx( strCon );
        CRecordset rs( &db );
        rs.Open( CRecordset::forwardOnly, strSQL );
     
        CString strMessage;
     
        while( !rs.IsEOF() )
        {
            rs.GetFieldValue( (short)0, strMessage );
            _tprintf( _T("%sn"), (LPCTSTR)strMessage );
            rs.MoveNext();
        }
        rs.Close();
        db.Close();
     
        return 0;
    }

    ソースコード(VC + MFC + ODBC + SQL Server)

    #include <afx.h>
    #include <afxdb.h>
     
    int _tmain( int argc, TCHAR* argv[] )
    {
        CDatabase db;
     
        CString strCon = _T("Driver={SQL Server};SERVER=(local);DATABASE=master;UID=sa;PWD=P@ssW0rd");
        CString strSQL = _T("SELECT 'Hello, ODBC(MFC) World!' AS Message");
     
        db.OpenEx( strCon );
        CRecordset rs( &db );
        rs.Open( CRecordset::forwardOnly, strSQL );
     
        CString strMessage;
     
        while( !rs.IsEOF() )
        {
            rs.GetFieldValue( (short)0, strMessage );
            _tprintf( _T("%sn"), (LPCTSTR)strMessage );
            rs.MoveNext();
        }
        rs.Close();
        db.Close();
     
        return 0;
    }

    ソースコード(VC + MFC + ODBC + Oracle)

    #include <afx.h>
    #include <afxdb.h>
     
    int _tmain( int argc, TCHAR* argv[] )
    {
        CDatabase db;
     
        CString strCon = _T("Driver={Microsoft ODBC for Oracle};SERVER=ORCL;UID=scott;PWD=tiger");
        CString strSQL = _T("SELECT 'Hello, ODBC(MFC) World!' AS Message FROM DUAL");
     
        db.OpenEx( strCon );
        CRecordset rs( &db );
        rs.Open( CRecordset::forwardOnly, strSQL );
     
        CString strMessage;
     
        while( !rs.IsEOF() )
        {
            rs.GetFieldValue( (short)0, strMessage );
            _tprintf( _T("%sn"), (LPCTSTR)strMessage );
            rs.MoveNext();
        }
        rs.Close();
        db.Close();
     
        return 0;
    }

    ソースコード(VC + MFC + ODBC + MySQL)

    #include <afx.h>
    #include <afxdb.h>
     
    int _tmain( int argc, TCHAR* argv[] )
    {
        CDatabase db;
     
        CString strCon = _T("Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd");
        CString strSQL = _T("SELECT 'Hello, ODBC(MFC) World!' AS Message");
     
        db.OpenEx( strCon );
        CRecordset rs( &db );
        rs.Open( CRecordset::forwardOnly, strSQL );
     
        CString strMessage;
     
        while( !rs.IsEOF() )
        {
            rs.GetFieldValue( (short)0, strMessage );
            _tprintf( _T("%sn"), (LPCTSTR)strMessage );
            rs.MoveNext();
        }
        rs.Close();
        db.Close();
     
        return 0;
    }

    コンパイル&リンク方法(Visual C++)

    C:¥> cl hello.cpp

    実行結果

    Message
    Hello, ODBC(MFC) World!
  6. Hello, ODBC(API) World!

    Posted on 3月 21st, 2012 by cx20

    ODBC(API)

    ODBC(Open Database Connectivity)は、マイクロソフト社が提唱した DBMS 接続用の API 仕様である。
    DBMS の差異は ODBC ドライバによって吸収される為、ODBC の手順にしたがってプログラムを作成すれば、基本的な差異を意識せず、プログラムすることができる。

    ODBCドライバ ファイル
    Microsoft Access Driver (*.mdb) ODBCJT32.DLL
    Microsoft Text Driver (*.txt; *.csv) ODBCJT32.DLL
    Microsoft Excel Driver (*.xls) ODBCJT32.DLL
    Microsoft dBase Driver (*.dbf) ODBCJT32.DLL
    Microsoft ODBC for Oracle MSORCL32.DLL
    Microsoft Paradox Driver (*.db ) ODBCJT32.DLL
    SQL Server SQLSRV32.DLL
    Microsoft Access Driver (*.mdb, *.accdb) ACEODBC.DLL
    SQL Server Native Client 10.0 SQLNCLI10.DLL

    ソースコード(VC + ODBC + Jet データベース)

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <sqlext.h>
    #include <sql.h>
     
    int _tmain( int argc, TCHAR* argv[] )
    {
        HENV henv;
        HDBC hdbc;
        HSTMT hstmt;
     
        _TCHAR szConnStr[1024];
        _TCHAR szConnOut[1024];
        SQLSMALLINT cchConOut; 
        _TCHAR szSQL[256];
     
        SQLTCHAR szColName[128];
        SQLSMALLINT nBufSize;
        SQLSMALLINT nSqlType;
        SQLULEN nColSize;
        SQLSMALLINT nScale;
        SQLSMALLINT nNullable;
        SQLTCHAR szMessage[256];
        SQLLEN nMessageLen;
        SQLRETURN  nReturn;
     
        _tcscpy( szConnStr, _T("Driver={Microsoft Access Driver (*.mdb)};DBQ=hello.mdb") );
        _tcscpy( szSQL, _T("SELECT 'Hello, ODBC World!' AS Message") );
     
        SQLAllocEnv( &henv );
        SQLAllocConnect( henv, &hdbc );
        SQLDriverConnect( hdbc, NULL, (SQLTCHAR*)szConnStr, _tcslen(szConnStr), 
            (SQLTCHAR*)szConnOut, _countof(szConnOut), &cchConOut, SQL_DRIVER_NOPROMPT );
        SQLAllocStmt( hdbc, &hstmt );
        SQLExecDirect( hstmt, (SQLTCHAR*)szSQL, SQL_NTS );
        SQLDescribeCol( hstmt, 1, (SQLTCHAR*)szColName, _countof(szColName),
            &nBufSize, &nSqlType, &nColSize, &nScale, &nNullable );
        SQLBindCol( hstmt, 1, SQL_C_TCHAR, szMessage, _countof(szMessage), &nMessageLen );
        while( TRUE )
        {
            nReturn = SQLFetch( hstmt );
            if( nReturn != SQL_SUCCESS
             && nReturn != SQL_SUCCESS_WITH_INFO )
            {
                break;
            }
     
            _tprintf( _T("%sn"), szColName );
            _tprintf( _T("------------------n") );
            _tprintf( _T("%sn"), szMessage );
        }
     
        SQLFreeStmt( hstmt, SQL_DROP );
        SQLDisconnect( hdbc );
        SQLFreeConnect( hdbc );
        SQLFreeEnv( henv );
     
        return 0;
    }

    ソースコード(VC + ODBC + ACE データベース)

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <sqlext.h>
    #include <sql.h>
     
    int _tmain( int argc, TCHAR* argv[] )
    {
        HENV henv;
        HDBC hdbc;
        HSTMT hstmt;
     
        _TCHAR szConnStr[1024];
        _TCHAR szConnOut[1024];
        SQLSMALLINT cchConOut; 
        _TCHAR szSQL[256];
     
        SQLTCHAR szColName[128];
        SQLSMALLINT nBufSize;
        SQLSMALLINT nSqlType;
        SQLULEN nColSize;
        SQLSMALLINT nScale;
        SQLSMALLINT nNullable;
        SQLTCHAR szMessage[256];
        SQLLEN nMessageLen;
        SQLRETURN  nReturn;
     
        _tcscpy( szConnStr, _T("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=.\hello.accdb") );
        _tcscpy( szSQL, _T("SELECT 'Hello, ODBC World!' AS Message") );
     
        SQLAllocEnv( &henv );
        SQLAllocConnect( henv, &hdbc );
        SQLDriverConnect( hdbc, NULL, (SQLTCHAR*)szConnStr, _tcslen(szConnStr), 
            (SQLTCHAR*)szConnOut, _countof(szConnOut), &cchConOut, SQL_DRIVER_NOPROMPT );
        SQLAllocStmt( hdbc, &hstmt );
        SQLExecDirect( hstmt, (SQLTCHAR*)szSQL, SQL_NTS );
        SQLDescribeCol( hstmt, 1, (SQLTCHAR*)szColName, _countof(szColName),
            &nBufSize, &nSqlType, &nColSize, &nScale, &nNullable );
        SQLBindCol( hstmt, 1, SQL_C_TCHAR, szMessage, _countof(szMessage), &nMessageLen );
        while( TRUE )
        {
            nReturn = SQLFetch( hstmt );
            if( nReturn != SQL_SUCCESS
             && nReturn != SQL_SUCCESS_WITH_INFO )
            {
                break;
            }
     
            _tprintf( _T("%sn"), szColName );
            _tprintf( _T("------------------n") );
            _tprintf( _T("%sn"), szMessage );
        }
     
        SQLFreeStmt( hstmt, SQL_DROP );
        SQLDisconnect( hdbc );
        SQLFreeConnect( hdbc );
        SQLFreeEnv( henv );
     
        return 0;
    }

    ソースコード(VC + ODBC + SQL Server)

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <sqlext.h>
    #include <sql.h>
     
    int _tmain( int argc, TCHAR* argv[] )
    {
        HENV henv;
        HDBC hdbc;
        HSTMT hstmt;
     
        _TCHAR szConnStr[1024];
        _TCHAR szConnOut[1024];
        SQLSMALLINT cchConOut; 
        _TCHAR szSQL[256];
     
        SQLTCHAR szColName[128];
        SQLSMALLINT nBufSize;
        SQLSMALLINT nSqlType;
        SQLULEN nColSize;
        SQLSMALLINT nScale;
        SQLSMALLINT nNullable;
        SQLTCHAR szMessage[256];
        SQLLEN nMessageLen;
        SQLRETURN  nReturn;
     
        _tcscpy( szConnStr, _T("Driver={SQL Server};SERVER=(local);DATABASE=master;UID=sa;PWD=P@ssW0rd") );
        _tcscpy( szSQL, _T("SELECT 'Hello, ODBC World!' AS Message") );
     
        SQLAllocEnv( &henv );
        SQLAllocConnect( henv, &hdbc );
        SQLDriverConnect( hdbc, NULL, (SQLTCHAR*)szConnStr, _tcslen(szConnStr), 
            (SQLTCHAR*)szConnOut, _countof(szConnOut), &cchConOut, SQL_DRIVER_NOPROMPT );
        SQLAllocStmt( hdbc, &hstmt );
        SQLExecDirect( hstmt, (SQLTCHAR*)szSQL, SQL_NTS );
        SQLDescribeCol( hstmt, 1, (SQLTCHAR*)szColName, _countof(szColName),
            &nBufSize, &nSqlType, &nColSize, &nScale, &nNullable );
        SQLBindCol( hstmt, 1, SQL_C_TCHAR, szMessage, _countof(szMessage), &nMessageLen );
        while( TRUE )
        {
            nReturn = SQLFetch( hstmt );
            if( nReturn != SQL_SUCCESS
             && nReturn != SQL_SUCCESS_WITH_INFO )
            {
                break;
            }
     
            _tprintf( _T("%sn"), szColName );
            _tprintf( _T("------------------n") );
            _tprintf( _T("%sn"), szMessage );
        }
     
        SQLFreeStmt( hstmt, SQL_DROP );
        SQLDisconnect( hdbc );
        SQLFreeConnect( hdbc );
        SQLFreeEnv( henv );
     
        return 0;
    }

    ソースコード(VC + ODBC + Oracle)

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <sqlext.h>
    #include <sql.h>
     
    int _tmain( int argc, TCHAR* argv[] )
    {
        HENV henv;
        HDBC hdbc;
        HSTMT hstmt;
     
        _TCHAR szConnStr[1024];
        _TCHAR szConnOut[1024];
        SQLSMALLINT cchConOut; 
        _TCHAR szSQL[256];
     
        SQLTCHAR szColName[128];
        SQLSMALLINT nBufSize;
        SQLSMALLINT nSqlType;
        SQLULEN nColSize;
        SQLSMALLINT nScale;
        SQLSMALLINT nNullable;
        SQLTCHAR szMessage[256];
        SQLLEN nMessageLen;
        SQLRETURN  nReturn;
     
        _tcscpy( szConnStr, _T("Driver={Microsoft ODBC for Oracle};SERVER=ORCL;UID=scott;PWD=tiger") );
        _tcscpy( szSQL, _T("SELECT 'Hello, ODBC World!' AS Message FROM DUAL") );
     
        SQLAllocEnv( &henv );
        SQLAllocConnect( henv, &hdbc );
        SQLDriverConnect( hdbc, NULL, (SQLTCHAR*)szConnStr, _tcslen(szConnStr), 
            (SQLTCHAR*)szConnOut, _countof(szConnOut), &cchConOut, SQL_DRIVER_NOPROMPT );
        SQLAllocStmt( hdbc, &hstmt );
        SQLExecDirect( hstmt, (SQLTCHAR*)szSQL, SQL_NTS );
        SQLDescribeCol( hstmt, 1, (SQLTCHAR*)szColName, _countof(szColName),
            &nBufSize, &nSqlType, &nColSize, &nScale, &nNullable );
        SQLBindCol( hstmt, 1, SQL_C_TCHAR, szMessage, _countof(szMessage), &nMessageLen );
        while( TRUE )
        {
            nReturn = SQLFetch( hstmt );
            if( nReturn != SQL_SUCCESS
             && nReturn != SQL_SUCCESS_WITH_INFO )
            {
                break;
            }
     
            _tprintf( _T("%sn"), szColName );
            _tprintf( _T("------------------n") );
            _tprintf( _T("%sn"), szMessage );
        }
     
        SQLFreeStmt( hstmt, SQL_DROP );
        SQLDisconnect( hdbc );
        SQLFreeConnect( hdbc );
        SQLFreeEnv( henv );
     
        return 0;
    }

    ソースコード(VC + ODBC + MySQL)

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <sqlext.h>
    #include <sql.h>
     
    int _tmain( int argc, TCHAR* argv[] )
    {
        HENV henv;
        HDBC hdbc;
        HSTMT hstmt;
     
        _TCHAR szConnStr[1024];
        _TCHAR szConnOut[1024];
        SQLSMALLINT cchConOut; 
        _TCHAR szSQL[256];
     
        SQLTCHAR szColName[128];
        SQLSMALLINT nBufSize;
        SQLSMALLINT nSqlType;
        SQLULEN nColSize;
        SQLSMALLINT nScale;
        SQLSMALLINT nNullable;
        SQLTCHAR szMessage[256];
        SQLLEN nMessageLen;
        SQLRETURN  nReturn;
     
        _tcscpy( szConnStr, _T("Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd") );
        _tcscpy( szSQL, _T("SELECT 'Hello, ODBC World!' AS Message") );
     
        SQLAllocEnv( &henv );
        SQLAllocConnect( henv, &hdbc );
        SQLDriverConnect( hdbc, NULL, (SQLTCHAR*)szConnStr, _tcslen(szConnStr), 
            (SQLTCHAR*)szConnOut, _countof(szConnOut), &cchConOut, SQL_DRIVER_NOPROMPT );
        SQLAllocStmt( hdbc, &hstmt );
        SQLExecDirect( hstmt, (SQLTCHAR*)szSQL, SQL_NTS );
        SQLDescribeCol( hstmt, 1, (SQLTCHAR*)szColName, _countof(szColName),
            &nBufSize, &nSqlType, &nColSize, &nScale, &nNullable );
        SQLBindCol( hstmt, 1, SQL_C_TCHAR, szMessage, _countof(szMessage), &nMessageLen );
        while( TRUE )
        {
            nReturn = SQLFetch( hstmt );
            if( nReturn != SQL_SUCCESS
             && nReturn != SQL_SUCCESS_WITH_INFO )
            {
                break;
            }
     
            _tprintf( _T("%sn"), szColName );
            _tprintf( _T("------------------n") );
            _tprintf( _T("%sn"), szMessage );
        }
     
        SQLFreeStmt( hstmt, SQL_DROP );
        SQLDisconnect( hdbc );
        SQLFreeConnect( hdbc );
        SQLFreeEnv( henv );
     
        return 0;
    }

    コンパイル&リンク方法(Visual C++)

    C:¥> cl hello.c /link odbc32.lib

    実行結果

    Message
    ------------------
    Hello, ODBC World!