Archive for the ‘library’ Category

  1. Hello, ADO.NET World!

    Posted on 3月 24th, 2012 by cx20

    ADO.NET

    ADO.NET(ActiveX Data Objects .NET)は、ADO の後継で .NET ベースの DBMS 接続用 API である。
    .NET データプロバイダを介することで様々な DBMS への接続が可能となっている。
    .NET Framework 標準で使用できる .NET データプロバイダとしては、以下のようなプロバイダがある。

    データプロバイダ名 説明
    System.Data.SqlClient Microsoft SQL Server
    System.Data.OleDb OLE DB
    System.Data.Odbc ODBC
    System.Data.OracleClient Oracle

    ソースコード(C# + ADO.NET + OLE DB + Jet データベース)

    using System;
    using System.Data.OleDb;
     
    class Hello
    {
        static void Main( String[] args )
        {
            string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;"
                + "Data Source=hello.mdb";
            string sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message";
     
            OleDbConnection con = new OleDbConnection(conStr);
            OleDbCommand  cmd = new OleDbCommand(sqlStr, con);
            con.Open();
            OleDbDataReader reader = cmd.ExecuteReader();
            while( reader.Read() )
            {
                Console.WriteLine( reader.GetName(0) );
                Console.WriteLine( "---------------------" );
                Console.WriteLine( reader[0] );
            }
            reader.Close();
            con.Close();
        }
    }

    ソースコード(C# + ADO.NET + OLE DB + ACE データベース)

    using System;
    using System.Data.OleDb;
     
    class Hello
    {
        static void Main( String[] args )
        {
            string conStr = "Provider=Microsoft.ACE.OLEDB.12.0;"
                + "Data Source=.\hello.accdb";
            string sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message";
     
            OleDbConnection con = new OleDbConnection(conStr);
            OleDbCommand  cmd = new OleDbCommand(sqlStr, con);
            con.Open();
            OleDbDataReader reader = cmd.ExecuteReader();
            while( reader.Read() )
            {
                Console.WriteLine( reader.GetName(0) );
                Console.WriteLine( "---------------------" );
                Console.WriteLine( reader[0] );
            }
            reader.Close();
            con.Close();
        }
    }

    ソースコード(C# + ADO.NET + SQL Server)

    using System;
    using System.Data.SqlClient;
     
    class Hello
    {
        static void Main( String[] args )
        {
            string conStr = "SERVER=(local);"
                + "DATABASE=master;"
                + "UID=sa;"
                + "PWD=P@ssW0rd";
            string sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message";
     
            SqlConnection con = new SqlConnection(conStr);
            SqlCommand cmd = new SqlCommand(sqlStr, con);
            con.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            while( reader.Read() )
            {
                Console.WriteLine( reader.GetName(0) );
                Console.WriteLine( "---------------------" );
                Console.WriteLine( reader[0] );
            }
            reader.Close();
            con.Close();
        }
    }

    ソースコード(C# + ADO.NET + Oracle)

    using System;
    using System.Data.OracleClient;
     
    class Hello
    {
        static void Main( String[] args )
        {
            string conStr = "Data Source=ORCL;User ID=scott;Password=tiger";
            string sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message FROM DUAL";
     
            OracleConnection con = new OracleConnection(conStr);
            OracleCommand cmd = new OracleCommand(sqlStr, con);
            con.Open();
            OracleDataReader reader = cmd.ExecuteReader();
            while( reader.Read() )
            {
                Console.WriteLine( reader.GetName(0) );
                Console.WriteLine( "---------------------" );
                Console.WriteLine( reader[0] );
            }
            reader.Close();
            con.Close();
        }
    }

    ソースコード(C# + ADO.NET + ODBC + MySQL)

    using System;
    using System.Data.Odbc;
     
    class Hello
    {
        static void Main( String[] args )
        {
            string conStr = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd";
            string sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message";
     
            OdbcConnection con = new OdbcConnection(conStr);
            OdbcCommand  cmd = new OdbcCommand(sqlStr, con);
            con.Open();
            OdbcDataReader reader = cmd.ExecuteReader();
            while( reader.Read() )
            {
                Console.WriteLine( reader.GetName(0) );
                Console.WriteLine( "---------------------" );
                Console.WriteLine( reader[0] );
            }
            reader.Close();
            con.Close();
        }
    }

    コンパイル方法(32bit OLE DB 使用時)

    C:¥> csc Hello.cs /platform:x86

    コンパイル方法(上記以外)

    C:¥> csc Hello.cs

    実行結果

    Message
    ---------------------
    Hello, ADO.NET World!
  2. Hello, ADO World!

    Posted on 3月 23rd, 2012 by cx20

    ADO

    ADO(ActiveX Data Objects)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
    OLE DB プロバイダを介することで様々な DBMS への接続が可能となっている。
    OLE DB プロバイダとしては、以下のようなプロバイダがある。いくつかが OS 標準で付属している他、追加インストールが可能である。

    プロバイダ名 表示名 説明
    MSDASQL Microsoft OLE DB Provider for ODBC ODBC データベース
    Microsoft.Jet.OLEDB.4.0 Microsoft OLE DB Provider for Microsoft Jet Microsoft Jet データベース
    Microsoft.ACE.OLEDB.12.0 Microsoft Office 12.0 Access Database Engine OLE DB Provider Microsoft Access データベース
    SQLOLEDB Microsoft OLE DB Provider for SQL Server Microsoft SQL Server
    SQLNCLI10 SQL Server Native Client 10.0 Microsoft SQL Server
    MSDAORA Microsoft OLE DB Provider for Oracle Oracle データベース

    ソースコード(VBScript + ADO + OLEDB + Jet データベース)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim cn
        Dim rs
     
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=.hello.mdb"
        Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message")
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-------------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        cn.Close
    End Sub

    ソースコード(VBScript + ADO + OLEDB + ACE データベース)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim cn
        Dim rs
     
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=.hello.accdb"
        Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message")
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-------------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
    End Sub

    ソースコード(VBScript + ADO + OLEDB + SQL Server)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim cn
        Dim rs
     
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "PROVIDER=SQLOLEDB;" & _
             "SERVER=(local);DATABASE=master;", _
             "sa", "P@ssW0rd"
        Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message")
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-------------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        cn.Close
    End Sub

    ソースコード(VBScript + ADO + OLEDB + Oracle)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim cn
        Dim rs
     
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "PROVIDER=MSDAORA;Data Source=ORCL", "scott", "tiger"
        Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message FROM DUAL")
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-------------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        cn.Close
    End Sub

    ソースコード(VBScript + ADO + ODBC + SQL Server)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim cn
        Dim rs
     
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "PROVIDER=MSDASQL;Driver={SQL Server};" & _
            "SERVER=(local);DATABASE=master;", _
            "sa", "P@ssW0rd"
        Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message")
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-------------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        cn.Close
    End Sub

    ソースコード(VBScript + ADO + ODBC + Oracle)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim cn
        Dim rs
     
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "PROVIDER=MSDASQL;Driver={Microsoft ODBC for Oracle};Server=ORCL", _
            "scott", "tiger"
        Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message FROM DUAL")
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-------------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        cn.Close
    End Sub

    ソースコード(VBScript + ADO + ODBC + MySQL)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim cn
        Dim rs
     
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "PROVIDER=MSDASQL;Driver={MySQL ODBC 5.1 Driver};Server=localhost", _
            "root", "P@ssW0rd"
        Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message")
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-------------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        cn.Close
    End Sub

    実行方法(Windows)

    C:¥> CScript //Nologo Hello.vbs

    実行結果

    Message
    -----------------
    Hello, ADO World!
  3. Hello, DAO World!

    Posted on 3月 22nd, 2012 by cx20

    DAO

    DAO(Data Access Object)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
    主に Jet データベース(Access MDB)との接続に用いられるが、ODBC 経由で他の DBMS への接続も可能である。
    長い間 DAO は 32bit 版のみしか提供されていなかったが、DAO 12 より 64bit 版が提供されるようになった。

    クライアントアプリケーション データベースエンジン 推奨されるデータベース形式
    Access 2.0 Jet 2.0 *.mdb (Jet 2.0)
    Access 95 Jet 3.0 *.mdb (Jet 3.x)
    Access 97 Jet 3.5 *.mdb (Jet 3.x)
    Access 2000 Jet 4.0 *.mdb (Jet 4.x)
    Access 2002 Jet 4.0 *.mdb (Jet 4.x)
    Access 2003 Jet 4.0 *.mdb (Jet 4.x)
    Access 2007 ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Access 2010 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Access 2010 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)
    DAO 3.0 Jet 3.0 *.mdb (Jet 3.x)
    DAO 3.5 Jet 3.5 *.mdb (Jet 3.x)
    DA0 3.6 Jet 4.0 *.mdb (Jet 4.x)
    DA0 12 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    DA0 12 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)
    Microsoft.Jet.OLEDB.3.51 Jet 3.5 *.mdb (Jet 3.x)
    Microsoft.Jet.OLEDB.4.0 Jet 4.0 *.mdb (Jet 4.x)
    Microsoft.ACE.OLEDB.12.0 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Microsoft.ACE.OLEDB.12.0 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)

    ソースコード(VBScript + DAO + Jet データベース)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim dbe
        Dim db
        Dim rs
     
        Set dbe = CreateObject("DAO.DBEngine.36")
        Set db = dbe.OpenDatabase("Hello.mdb")
        Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-----------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        db.Close
    End Sub

    ソースコード(VBScript + DAO + ACE データベース)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim dbe
        Dim db
        Dim rs
     
        Set dbe = CreateObject("DAO.DBEngine.120")
        Set db = dbe.OpenDatabase("Hello.accdb")
        Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-----------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
    End Sub

    ソースコード(VBScript + DAO + ODBC + SQL Server)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim dbe
        Dim db
        Dim rs
     
        Set dbe = CreateObject("DAO.DBEngine.36")
        Set db = dbe.OpenDatabase("", False, False, _
            "ODBC;Driver={SQL Server};" & _
            "SERVER=(local);DATABASE=master;" & _
            "UID=sa;PWD=P@ssW0rd;")
        Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-----------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        db.Close
    End Sub

    ソースコード(VBScript + DAO + ODBC + Oracle)

    Option Explicit
     
    Const dbOpenSnapshot = 4
    Const dbSQLPassThrough = 64
     
    Call Main()
     
    Sub Main()
        Dim dbe
        Dim db
        Dim rs
     
        Set dbe = CreateObject("DAO.DBEngine.36")
        Set db = dbe.OpenDatabase("", False, False, _
            "ODBC;Driver={Oracle in OraDb11g_home1};" & _
            "DBQ=ORCL;" & _
            "UID=scott;PWD=tiger;")
        Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
        ' パススルークエリの例(データベース側に依存する SQL を実行する場合)
        'Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message FROM DUAL", dbOpenSnapshot, dbSQLPassThrough)
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-----------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        db.Close
    End Sub

    実行方法(Windows)

    C:¥> CScript //Nologo Hello.vbs

    実行結果

    Message
    -----------------
    Hello, DAO World!
  4. 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!
  5. Hello, ESQL/C World!

    Posted on 3月 20th, 2012 by cx20

    ESQL/C

    ESQL は埋め込み SQL(Embedded SQL)とも呼ばれ、手続型プログラミング言語(ホスト言語)に SQL を埋め込む方式のことを言う。埋め込み SQL 自体は、標準SQL として ANSI/ISO にて仕様が策定されている。
    ESQL/C は、ホスト言語に C言語を対象としており、SQL Server の他、いくつかの DBMS で採用している。なお、Oracle Database 用の 埋め込みSQL は Pro*C と呼ばれる。
    SQL Server 用の ESQL/C では、ESQL プリプロセッサにより「.sqc」ファイルから「*.c」ファイルを生成する。

    ソースコード(ESQL)

    #include <stdio.h>
     
    int main( int argc, char* argv[] )
    {
        EXEC SQL BEGIN DECLARE SECTION;
        char szServerDatabase[] = "(local).pubs";
        char szLoginPassword[] = "sa.P@ssW0rd";
        char szCommand[] = "SELECT 'Hello, ESQL/C World!' AS Message";
        char message[32] = { 0 };
        EXEC SQL END DECLARE SECTION;
        EXEC SQL CONNECT TO :szServerDatabase USER :szLoginPassword;
        EXEC SQL DECLARE C1 CURSOR FOR stmt;
        EXEC SQL PREPARE stmt FROM :szCommand;
        EXEC SQL OPEN C1;
        while ( SQLCODE == 0 )
        {
            EXEC SQL FETCH C1 INTO :message;
            if ( SQLCODE == 0 )
            {
                printf( "Messagen" );
                printf( "--------------------n" );
                printf( "%sn", message );
            }
        }
        EXEC SQL CLOSE C1;
        EXEC SQL DISCONNECT ALL;
        return 0;
    }

    上記コードは、ESQL プリプロセッサにより、以下の C言語のコードが生成される。

    ソースコード(C言語)

    /* ===== hello.c =====*/
    /* ===== NT doesn't need the following... */
    #ifndef WIN32
    #define WIN32
    #endif
    #define _loadds
    #define _SQLPREP_
    #include <sqlca.h>
    #include <sqlda.h>
    #include <string.h>
    #define SQLLENMAX(x)      ( ((x) > 32767) ? 32767 : (x) )
    short ESQLAPI _loadds sqlaaloc(
    	unsigned short usSqlDaId,
    	unsigned short sqld,
    	unsigned short stmt_id,
    	void far *spare);
    short ESQLAPI _loadds sqlxcall(
    	unsigned short usCallType,
    	unsigned short usSection,
    	unsigned short usSqldaInId,
    	unsigned short usSqlDaOutId,
    	unsigned short usSqlTextLen,
    	char far *lpszSQLText);
    short ESQLAPI _loadds sqlacall(
    	unsigned short usCallType,
    	unsigned short usSection,
    	unsigned short usSqldaInId,
    	unsigned short usSqlDaOutId,
    	void far *spare);
    short ESQLAPI _loadds sqladloc(
    	unsigned short usSqldaInId,
    	void far *spare);
    short ESQLAPI _loadds sqlasets(
    	unsigned short cbSqlText,
    	void far *lpvSqlText,
    	void far *spare);
    short ESQLAPI _loadds sqlasetv(
    	unsigned short usSqldaInId,
    	unsigned short sqlvar_index,
    	unsigned short sqltype,
    	unsigned short sqllen,
    	void far *sqldata,
    	void far *sqlind,
    	void far *spare);
    short ESQLAPI _loadds sqlastop(
    	void far *spare);
    short ESQLAPI _loadds sqlastrt(
    	void far *pid,
    	void far *spare,
    	void far *sqlca);
    short ESQLAPI _loadds sqlausda(
    	unsigned short sqldaId,
    	void far *lpvSqlDa,
    	void far *spare);
    extern struct tag_sqlca far sql_sqlca;
    extern struct tag_sqlca far *sqlca;
    struct sqla_program_id2 {unsigned short length;unsigned short rp_rel_num;unsigned short db_rel_num;unsigned short bf_rel_num;unsigned char  sqluser[30];unsigned char  sqlusername[30];
    unsigned char  planname[256];unsigned char  contoken[8];unsigned char  buffer[8];};static struct sqla_program_id2 program_id =		{340,2,0,0,"                              ","","hello","AAAvBYD0","        "};
    static void far* pid = &program_id;
    #line 1 "hello.sqc"
    #line 2 "hello.sqc"
    int main( int argc, char* argv[] )
    {
    #line 5
    /*
    EXEC SQL BEGIN DECLARE SECTION;
    */
    #line 5
        char szServerDatabase[] = "(local).pubs";
        char szLoginPassword[] = "sa.P@ssW0rd";
        char szCommand[] = "SELECT 'Hello, ESQL/C World!' AS Message";
        char message[32] = { 0 };
    #line 10
    /*
    EXEC SQL END DECLARE SECTION;
    */
    #line 10
    #line 11
    /*
    EXEC SQL CONNECT TO :szServerDatabase USER :szLoginPassword;
    */
    #line 11
    #line 11
    {
    #line 11
    	sqlastrt((void far *)pid, (void far *)0, (struct tag_sqlca far *)sqlca);
    #line 11
    	sqlaaloc(2, 2, 1, (void far *)0);
    #line 11
    	sqlasetv(2, 0, 462, (short) SQLLENMAX(sizeof(szServerDatabase)), (void far *)szServerDatabase, (void far *)0, (void far *)0L);
    #line 11
    	sqlasetv(2, 1, 462, (short) SQLLENMAX(sizeof(szLoginPassword)), (void far *)szLoginPassword, (void far *)0, (void far *)0L);
    #line 11
    	sqlxcall(30, 1, 2, 0, 55, (char far *)"  CONNECT TO @p1                USER @p2               ");
    #line 11
    	SQLCODE = sqlca->sqlcode;
    #line 11
    	sqlastop((void far *)0L);
    #line 11
    }
    #line 12
    #line 12
    /*
    EXEC SQL DECLARE C1 CURSOR FOR stmt;
    */
    #line 12
    #line 13
    /*
    EXEC SQL PREPARE stmt FROM :szCommand;
    */
    #line 13
    #line 13
    {
    #line 13
    	sqlastrt((void far *)pid, (void far *)0, (struct tag_sqlca far *)sqlca);
    #line 13
    	sqlasets((unsigned short)strlen(szCommand), (void far *)szCommand, (void *)0L);
    #line 13
    	sqlacall(27, 2, 0, 0, 0L);
    #line 13
    	SQLCODE = sqlca->sqlcode;
    #line 13
    	sqlastop((void far *)0L);
    #line 13
    }
    #line 14
    #line 14
    /*
    EXEC SQL OPEN C1;
    */
    #line 14
    #line 14
    {
    #line 14
    	sqlastrt((void far *)pid, (void far *)0, (struct tag_sqlca far *)sqlca);
    #line 14
    	sqlxcall(110, 2, 0, 0, 18, (char far *)"/* C1 2 nohold */ ");
    #line 14
    	SQLCODE = sqlca->sqlcode;
    #line 14
    	sqlastop((void far *)0L);
    #line 14
    }
    #line 15
    #line 14
    {
    #line 14
    	sqlastrt((void far *)pid, (void far *)0, (struct tag_sqlca far *)sqlca);
    #line 14
    	sqlacall(26, 2, 0, 0, 0L);
    #line 14
    	SQLCODE = sqlca->sqlcode;
    #line 14
    	sqlastop((void far *)0L);
    #line 14
    }
    #line 15
        while ( SQLCODE == 0 )
        {
    #line 17
    /*
    EXEC SQL FETCH C1 INTO :message;
    */
    #line 17
    #line 17
    {
    #line 17
    	sqlastrt((void far *)pid, (void far *)0, (struct tag_sqlca far *)sqlca);
    #line 17
    	sqlaaloc(1, 1, 2, (void far *)0);
    #line 17
    	sqlasetv(1, 0, 462,(short) SQLLENMAX(sizeof(message)),(void far *)&message, (void far *)0,0L);
    #line 17
    	sqlxcall(25, 2, 0, 1, 26, (char far *)"  FETCH C1 INTO :         ");
    #line 17
    	SQLCODE = sqlca->sqlcode;
    #line 17
    	sqlastop((void far *)0L);
    #line 17
    }
    #line 18
            if ( SQLCODE == 0 )
            {
                printf( "Messagen" );
                printf( "--------------------n" );
                printf( "%sn", message );
            }
        }
    #line 25
    /*
    EXEC SQL CLOSE C1;
    */
    #line 25
    #line 25
    {
    #line 25
    	sqlastrt((void far *)pid, (void far *)0, (struct tag_sqlca far *)sqlca);
    #line 25
    	sqlxcall(20, 2, 0, 0, 11, (char far *)"  CLOSE C1 ");
    #line 25
    	SQLCODE = sqlca->sqlcode;
    #line 25
    	sqlastop((void far *)0L);
    #line 25
    }
    #line 26
    #line 26
    /*
    EXEC SQL DISCONNECT ALL;
    */
    #line 26
    #line 26
    {
    #line 26
    	sqlastrt((void far *)pid, (void far *)0, (struct tag_sqlca far *)sqlca);
    #line 26
    	sqlxcall(36, 3, 0, 0, 17, (char far *)"  DISCONNECT ALL ");
    #line 26
    	SQLCODE = sqlca->sqlcode;
    #line 26
    	sqlastop((void far *)0L);
    #line 26
    }
    #line 27
        return 0;
    }
    long SQLCODE;

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

    C:¥> nsqlprep hello.sqc
    C:¥> cl hello.c /link sqlakw32.lib caw32.lib

    実行結果

    Message
    --------------------
    Hello, ESQL/C World!
  6. Hello, DB-Library World!

    Posted on 3月 19th, 2012 by cx20

    DB-Library

    DB-Library は SQL Server 用のネイティブライブラリ(C API)である。
    SQL Server 2000 が最後のリリースとなっており、SQL Server 2005 以降は SQL Server Native Client(OLE DB または ODBC)の使用が推奨されている。

    ソースコード

    #define DBNTWIN32
    #include "windows.h"
     
    #include <sqlfront.h>
    #include <sqldb.h>
    #include <stdio.h>
     
    int main( int argc, char* argv[] )
    {
        DBPROCESS* dbproc;
        LOGINREC*  login;
        char       message[256];
     
        dbinit();
        login = dblogin();
        DBSETLUSER( login, "sa" );
        DBSETLPWD ( login, "P@ssw0rd" );
        dbproc = dbopen( login, "(local)" );
        dbcmd     ( dbproc, "SELECT 'Hello, DB-Library World' AS Message");
        dbsqlexec ( dbproc ); 
        dbresults ( dbproc );
        dbbind    ( dbproc, 1, NTBSTRINGBIND, (DBINT)0, message );
        while( dbnextrow( dbproc ) != NO_MORE_ROWS )
        {
            printf( "Messagen" );
            printf( "-----------------------n" );
            printf( "%sn", message );
        }
        dbexit();
     
        return 0; 
    }

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

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

    実行結果

    Message
    ------------------------
    Hello, DB-Library World!
  7. Hello, jQuery World!

    Posted on 2月 6th, 2012 by cx20

    jQuery

    jQuery は高い人気を誇る JavaScript ライブラリの1つである。マイクロソフトの ASP.NET のクライアントスクリプトライブラリにも採用されている。

    ソースコード

    <html>
      <head>
        <title>Hello, World!</title>
        <script type="text/javascript" src="js/jquery.js"></script>
        <script type="text/javascript">
        <!--
          $(function() {
            $('#hello').html('<p>Hello, jQuery World!</p>');
          });
        //-->
        </script>
      </head>
      <body>
        <div id="hello"></div>
      </body>
    </html>

    実行方法

    1. Web サーバーの公開フォルダへ配置
    2. ブラウザで表示
       http://localhost/doc/hello.html

    実行結果

    Hello, jQuery World!
  8. Hello, prototype.js World!

    Posted on 2月 5th, 2012 by cx20

    prototype.js

    prototype.js は Ajax 対応の JavaScript ライブラリの一つ。Ruby on Rails に同梱されている。

    ソースコード

    <html>
      <head>
        <title>Hello, World!</title>
        <script type="text/javascript" src="js/prototype.js"></script>
        <script type="text/javascript">
        <!--
          Event.observe(window, 'load', function() {
            var elem = $('hello');
            elem.innerHTML = "<p>Hello, prototype.js World!</p>";
          });
        //-->
        </script>
      </head>
      <body>
        <div id="hello"></div>
      </body>
    </html>

    実行方法

    1. Web サーバーの公開フォルダへ配置
    2. ブラウザで表示
       http://localhost/doc/hello.html

    実行結果

    Hello, prototype.js World!