Archive for 4月, 2012

  1. Hello, Win32 API(CUI) World!

    Posted on 4月 11th, 2012 by cx20

    Win32 API(CUI)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。

    ソースコード

    #include <windows.h>
    #include <tchar.h>
     
    int _tmain( int argc, TCHAR* argv[] )
    {
        HANDLE  hStdOutput;
        DWORD   dwSize;
        TCHAR   szBuf[256];
     
        lstrcpy( szBuf, _T("Hello, Win32 API(CUI) World!n") );
        hStdOutput = GetStdHandle( STD_OUTPUT_HANDLE );
        WriteConsole( hStdOutput, szBuf, lstrlen(szBuf), &dwSize, NULL );
     
        return 0;
    }

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

    C:¥> cl hello.c /link /SUBSYSTEM:CONSOLE

    実行結果

    Hello, Win32 API(CUI) World!
  2. Hello, JNI World!

    Posted on 4月 10th, 2012 by cx20

    JNI

    JNA(Java Native Interface)は、Java と他の言語のインターフェイス仕様である。
    Java から C言語のライブラリの呼び出し、また、C言語から Java のライブラリの呼び出し等が可能である。
    ここでは、C言語から Java のライブラリの呼び出しのサンプルを記載する。

    ソースコード(呼び出す側(C++))

    #include <jni.h>
     
    int main( int argc, char* argv[] )
    {
        JNIEnv* env;
        JavaVM* jvm;
     
        // Java VM オプション設定
        JavaVMOption options[1];
        options[0].optionString = "-Xmx128m";
     
        JavaVMInitArgs vm_args;
        vm_args.version = JNI_VERSION_1_6;
        vm_args.options = options;
        vm_args.nOptions = 1;
     
        // Java VM 作成
        JNI_CreateJavaVM(&jvm, (void **)&env, &vm_args);
        // Class 検索
        jclass clazz = env->FindClass("Hello");
        // Method ID 取得
        jmethodID mid = env->GetStaticMethodID(clazz, "main", "([Ljava/lang/String;)V");
        // Class メソッド呼び出し
        env->CallStaticVoidMethod(clazz, mid, NULL);
        // Java VM 破棄
        jvm->DestroyJavaVM();
     
        return 0;
    }

    ソースコード(呼び出される側(Java))

    public class Hello {
        public static void main( String[] args ) {
            System.out.println( "Hello, JNI World!" );
        }
    }

    コンパイル&実行方法

    $ javac Hello.java
    $ c++ -o jnihello jnihello.cpp ¥
    -I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/ ¥
    -framework JavaVM ¥
    -m64
    $ ./jnihello

    実行結果

    Hello, JNI World!
  3. Hello, JNA World!

    Posted on 4月 9th, 2012 by cx20

    JNA

    JNA(Java Native Access)は、Java から C言語などの共有ライブラリにアクセスするライブラリである。

    ソースコード

    import com.sun.jna.Library;
    import com.sun.jna.Native;
    import com.sun.jna.Platform;
     
    public class Hello {
        public interface CLibrary extends Library {
            CLibrary INSTANCE = (CLibrary) Native.loadLibrary(Platform.isWindows() ? "msvcrt" : "c", CLibrary.class);
            void printf(String format, Object... args);
        }
     
        public static void main(String[] args) {
            CLibrary c = CLibrary.INSTANCE;
            c.printf("Hello, JNA World!n");
        }
    }

    コンパイル&実行方法

    $ javac -cp jna.jar:platform.jar:. Hello.java
    $ java -cp jna.jar:platform.jar:. Hello

    実行結果

    Hello, JNA World!
  4. Hello, LINQ World!

    Posted on 4月 8th, 2012 by cx20

    LINQ

    LINQ(Language Integrated Query : 統合言語クエリ)は、.NET 言語から DBMS や XML にアクセスする為の汎用クエリ機能である。
    LINQ プロバイダとして、以下のようなものがある。

    LINQ プロバイダ 説明
    LINQ to SQL SQL Server
    LINQ to XML XML ドキュメント
    LINQ to Dataset ADO.NET データセット
    LINQ to Objects .NET コレクション、ファイル、文字列など

    ソースコード(C# + LINQ to Objects)

    using System;
    using System.Linq;
    using System.Collections.Generic;
     
    class Record
    {
        public string Message;
        public Record(string message)
        {
            this.Message = message;
        }
    }
     
    class Hello
    {
        static void Main(string[] args)
        {
            Record[] records = new Record[]
            {
                new Record("Hello, LINQ World!")
            };
     
            IEnumerable<Record> query =
                from n in records
                select n;
     
            foreach (Record r in query)
            {
                Console.WriteLine(r.Message);
            }
        }
    }

    ソースコード(C# + LINQ to SQL)

    /**
    -- <事前準備>
    -- 1. テーブル作成
    CREATE TABLE HELLO
    (
        ID      INT         NOT NULL,
        MESSAGE VARCHAR(50) NULL,
        PRIMARY KEY (ID)
    );
    -- 2. データ投入
    INSERT HELLO ( ID, MESSAGE ) VALUES ( 1, 'Hello, LINQ World' );
    -- 3. データ表示
    SELECT * FROM HELLO;
    -- ------------------
    ID MESSAGE
    -- ------------------
     1 Hello, LINQ World!
    -- ------------------
    */
     
    using System;
    using System.Linq;
    using System.Data.Linq;
    using System.Data.Linq.Mapping;
     
    public class HelloDataContext : DataContext
    {
        public HelloDataContext(string connectionString) : base(connectionString) { }
        public Table<HelloTable> Hello;
    }
     
    [Table(Name = "Hello")]
    public class HelloTable
    {
        [Column(IsPrimaryKey = true)]
        public int Id;
        [Column]
        public string Message;
    }
     
    class Hello
    {
        static void Main(string[] args)
        {
            string conStr = "SERVER=(local);"
                + "DATABASE=Hello;"
                + "UID=sa;"
                + "PWD=P@ssW0rd";
            var db = new HelloDataContext( conStr );
            var q = 
                from h in db.Hello
                select h;
            foreach (var h in q)
            {
                Console.WriteLine(h.Message);
            }
        }
    }

    ソースコード(VB.NET + LINQ to SQL)

    ''' -- <事前準備>
    ''' -- 1. テーブル作成
    ''' CREATE TABLE HELLO
    ''' (
    '''     ID      INT         NOT NULL,
    '''     MESSAGE VARCHAR(50) NULL,
    '''     PRIMARY KEY (ID)
    ''' );
    ''' -- 2. データ投入
    ''' INSERT HELLO ( ID, MESSAGE ) VALUES ( 1, 'Hello, LINQ World' );
    ''' -- 3. データ表示
    ''' SELECT * FROM HELLO;
    ''' -- ------------------
    ''' ID MESSAGE
    ''' -- ------------------
    '''  1 Hello, LINQ World!
    ''' -- ------------------
     
    Imports System
    Imports System.Linq
    Imports System.Data.Linq
    Imports System.Data.Linq.Mapping
     
    Public Class HelloDataContext 
        Inherits DataContext
        Public Sub New( ByVal connectionString As String )
            MyBase.New(connectionString)
        End Sub
        Public Hello As Table( Of HelloTable )
    End Class
     
    <Table(Name := "Hello")> _
    Public Class HelloTable
        <Column(IsPrimaryKey := True)> _
        Public Id As Integer
        <Column()> _
        Public Message As String
    End Class
     
    Class Hello
        Shared Sub Main()
            Dim conStr As String = "SERVER=(local);" _
                & "DATABASE=Hello;" _
                & "UID=sa;" _
                & "PWD=P@ssW0rd"
            Dim db = New HelloDataContext( conStr )
     
            Dim q = 
                from h In db.Hello
                Select h
     
            For Each h In q
                Console.WriteLine(h.Message)
            Next
        End Sub
    End Class

    コンパイル方法(C# + LINQ to Objects)

    C:¥> csc Hello.cs

    コンパイル方法(C# + LINQ to SQL)

    C:¥> csc Hello.cs

    コンパイル方法(VB.NET + LINQ to SQL)

    C:¥> vbc Hello.vb

    実行結果

    Hello, LINQ World!
  5. Hello, SQLJ World!

    Posted on 4月 7th, 2012 by cx20

    SQLJ

    SQLJ は Oracle Database に対応した Java 用の埋め込み SQL(Embedded SQL)である。類似の製品としては、Pro*C/C++、Pro*COBOL、Pro*FORTRAN、Pro*Pascal 等がある。
    なお、埋め込み SQL 自体は、標準SQL として ANSI/ISO にて仕様が策定されている。

    ソースコード(SQLJ)

    import java.sql.*;
    import oracle.sqlj.runtime.Oracle;
     
    #sql iterator MessageIter ( String MESSAGE );
     
    class Hello {
        public static void main( String[] args ) throws Exception {
            Oracle.connect("jdbc:oracle:oci:@", "scott", "tiger");
            MessageIter iter;
            #sql iter = { SELECT 'Hello, SQLJ World!' AS Message FROM DUAL };
            while ( iter.next() ) {
                System.out.println( iter.MESSAGE() );
            }
        }
    }

    上記コードは、SQLJ トランスレータ により、以下の Java のコードが生成される。

    ソースコード(Java)

    /*@lineinfo:filename=Hello*//*@lineinfo:user-code*//*@lineinfo:1^1*/import java.sql.*;
    import oracle.sqlj.runtime.Oracle;
     
    /*@lineinfo:generated-code*//*@lineinfo:4^1*/
     
    //  ************************************************************
    //  SQLJ iterator declaration:
    //  ************************************************************
     
    class MessageIter
    extends sqlj.runtime.ref.ResultSetIterImpl
    implements sqlj.runtime.NamedIterator
    {
      public MessageIter(sqlj.runtime.profile.RTResultSet resultSet)
        throws java.sql.SQLException
      {
        super(resultSet);
        MESSAGENdx = findColumn("MESSAGE");
        m_rs = (oracle.jdbc.OracleResultSet) resultSet.getJDBCResultSet();
      }
      private oracle.jdbc.OracleResultSet m_rs;
      public String MESSAGE()
        throws java.sql.SQLException
      {
        return (String)m_rs.getString(MESSAGENdx);
      }
      private int MESSAGENdx;
    }
     
     
    //  ************************************************************
     
    /*@lineinfo:user-code*//*@lineinfo:4^44*/
     
    class Hello {
        public static void main( String[] args ) throws Exception {
            Oracle.connect("jdbc:oracle:oci:@", "scott", "tiger");
            MessageIter iter;
            /*@lineinfo:generated-code*//*@lineinfo:10^9*/
     
    //  ************************************************************
    //  #sql iter = { SELECT 'Hello, SQLJ World!' AS Message FROM DUAL  };
    //  ************************************************************
     
    {
      // declare temps
      oracle.jdbc.OraclePreparedStatement __sJT_st = null;
      sqlj.runtime.ref.DefaultContext __sJT_cc = sqlj.runtime.ref.DefaultContext.getDefaultContext(); if (__sJT_cc==null) sqlj.runtime.error.RuntimeRefErrors.raise_NULL_CONN_CTX();
      sqlj.runtime.ExecutionContext.OracleContext __sJT_ec = ((__sJT_cc.getExecutionContext()==null) ? sqlj.runtime.ExecutionContext.raiseNullExecCtx() : __sJT_cc.getExecutionContext().getOracleContext());
      try {
       String theSqlTS = "SELECT 'Hello, SQLJ World!' AS Message FROM DUAL";
       __sJT_st = __sJT_ec.prepareOracleStatement(__sJT_cc,"0MessageIter",theSqlTS);
       // execute query
       iter = new MessageIter(new sqlj.runtime.ref.OraRTResultSet(__sJT_ec.oracleExecuteQuery(),__sJT_st,"0MessageIter",null));
      } finally { __sJT_ec.oracleCloseQuery(); }
    }
     
     
    //  ************************************************************
     
    /*@lineinfo:user-code*//*@lineinfo:10^72*/
            while ( iter.next() ) {
                System.out.println( iter.MESSAGE() );
            }
        }
    }/*@lineinfo:generated-code*/

    コンパイル&実行方法

    C:¥> SET PATH=ORACLE_BASEORACLE_HOMEbin;%PATH%
    C:¥> SET CLASSPATH=ORACLE_BASEORACLE_HOMEsqljlibruntime12.jar;
         ORACLE_BASEORACLE_HOMEsqljlibtranslator.jar;
         ORACLE_BASEORACLE_HOMEjdbclibojdbc6.jar;%CLASSPATH%
    C:¥> sqlj Hello.sqlj
    C:¥> java Hello

    実行結果

    Hello, SQLJ World!
  6. Hello, JDBC Type4 World!

    Posted on 4月 6th, 2012 by cx20

    JDBC Type4

    JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
    Type4 は DBMS のクライアントライブラリを使用しない Pure Java の DBMS ドライバである。

    ソースコード(Java + JDBC Type4 + SQL Server)

    import java.sql.*;
     
    class Hello {
        public static void main( String[] args ) throws Exception {
            Class.forName ("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Connection conn = DriverManager.getConnection("jdbc:sqlserver://;serverName=localhost", "sa", "P@ssW0rd");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type4 World!' AS Message");
            while ( rs.next() ) {
                 System.out.println( rs.getString(1) );
            }
            rs.close();
            stmt.close();
            conn.close();
        }
    }

    コンパイル&実行方法(Java + JDBC Type4 + SQL Server)

    C:¥> javac Hello.java
    C:¥> java -cp "sqljdbc4.jar;." Hello

    ソースコード(Java + JDBC Type4 + Oracle)

    import java.sql.*;
     
    class Hello {
        public static void main( String[] args ) throws Exception {
            Class.forName ("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type4 World!' AS Message FROM DUAL");
            while ( rs.next() ) {
                 System.out.println( rs.getString(1) );
            }
            rs.close();
            stmt.close();
            conn.close();
        }
    }

    コンパイル&実行方法(Java + JDBC Type4 + Oracle)

    C:¥> javac Hello.java
    C:¥> java -cp "ojdbc6.jar;." Hello

    ソースコード(Java + JDBC Type4 + MySQL)

    import java.sql.*;
     
    class Hello {
        public static void main( String[] args ) throws Exception {
            Class.forName ("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306", "root", "P@ssW0rd");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type4 World!' AS Message");
            while ( rs.next() ) {
                 System.out.println( rs.getString(1) );
            }
            rs.close();
            stmt.close();
            conn.close();
        }
    }

    コンパイル&実行方法(Java + JDBC Type4 + MySQL)

    C:¥> javac Hello.java
    C:¥> java -cp "mysql-connector-java-5.1.22-bin.jar;." Hello

    実行結果

    Hello, JDBC Type4 World!
  7. Hello, JDBC Type2 World!

    Posted on 4月 5th, 2012 by cx20

    JDBC Type2

    JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
    Type2 は JDBC と DBMS クライアントの API をマップさせたブリッジドライバである。
    例えば、Oracle であればクライアントライブラリとして OCI が使用される。

    ソースコード(Java + JDBC Type2 + Oracle)

    import java.sql.*;
     
    class Hello {
        public static void main( String[] args ) throws Exception {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection("jdbc:oracle:oci:@orcl", "scott", "tiger");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type2 World!' AS Message FROM DUAL");
            while ( rs.next() ) {
                System.out.println( rs.getString(1) );
            }
            rs.close();
            stmt.close();
            conn.close();
        }
    }

    コンパイル&実行方法

    C:¥> javac Hello.java
    C:¥> java -cp "ojdbc6.jar;." Hello

    実行結果

    Hello, JDBC Type2 World!
  8. Hello, JDBC Type1 World!

    Posted on 4月 4th, 2012 by cx20

    JDBC Type1

    JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
    Type1 は JDBC と ODBC の API をマップさせたブリッジドライバである。

    ソースコード(Java + JDBC Type1 + ODBC + Jet データベース)

    import java.sql.*;
    import sun.jdbc.odbc.*;
     
    class Hello
    {
        public static void main( String[] args ) throws Exception {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            // ODBC DSN を使用したケース
            Connection conn = DriverManager.getConnection("jdbc:odbc:HELLODSN", "", "");
            // ODBC 接続文字列を使用したケース
            //Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=.\hello.mdb", "", "");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message");
            while ( rs.next() ) {
                System.out.println( rs.getString(1) );
            }
            rs.close();
            stmt.close();
            conn.close();
        }
    }

    ソースコード(Java + JDBC Type1 + ODBC + ACE データベース)

    import java.sql.*;
    import sun.jdbc.odbc.*;
     
    class Hello
    {
        public static void main( String[] args ) throws Exception {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            // ODBC DSN を使用したケース
            Connection conn = DriverManager.getConnection("jdbc:odbc:HELLODSN", "", "");
            // ODBC 接続文字列を使用したケース
            //Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=.\hello.accdb", "", "");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message");
            while ( rs.next() ) {
                System.out.println( rs.getString(1) );
            }
            rs.close();
            stmt.close();
            conn.close();
        }
    }

    ソースコード(Java + JDBC Type1 + ODBC + SQL Server)

    import java.sql.*;
    import sun.jdbc.odbc.*;
     
    class Hello
    {
        public static void main( String[] args ) throws Exception {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            // ODBC DSN を使用したケース
            Connection conn = DriverManager.getConnection("jdbc:odbc:HELLODSN", "sa", "P@ssW0rd");
            // ODBC 接続文字列を使用したケース
            //Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={SQL Server};SERVER=(local)", "sa", "P@ssW0rd");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message");
            while ( rs.next() ) {
                System.out.println( rs.getString(1) );
            }
            rs.close();
            stmt.close();
            conn.close();
        }
    }

    ソースコード(Java + JDBC Type1 + ODBC + Oracle)

    import java.sql.*;
    import sun.jdbc.odbc.*;
     
    class Hello
    {
        public static void main( String[] args ) throws Exception {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            // ODBC DSN を使用したケース
            Connection conn = DriverManager.getConnection("jdbc:odbc:HELLODSN", "scott", "tiger");
            // ODBC 接続文字列を使用したケース1(MS 製 ODBC ドライバ)
            //Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft ODBC for Oracle};Data Source=ORCL", "scott", "tiger");
            // ODBC 接続文字列を使用したケース2(Oracle 製 ODBC ドライバ)
            //Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={Oracle in OraDb11g_home1};DBQ=ORCL", "scott", "tiger");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message FROM DUAL");
            while ( rs.next() ) {
                System.out.println( rs.getString(1) );
            }
            rs.close();
            stmt.close();
            conn.close();
        }
    }

    ソースコード(Java + JDBC Type1 + ODBC + MySQL)

    import java.sql.*;
    import sun.jdbc.odbc.*;
     
    class Hello
    {
        public static void main( String[] args ) throws Exception {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            // ODBC DSN を使用したケース
            Connection conn = DriverManager.getConnection("jdbc:odbc:HELLODSN", "root", "P@ssW0rd");
            // ODBC 接続文字列を使用したケース
            //Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={MySQL ODBC 5.1 Driver};Server=localhost", "root", "P@ssW0rd");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message");
            while ( rs.next() ) {
                System.out.println( rs.getString(1) );
            }
            rs.close();
            stmt.close();
            conn.close();
        }
    }

    コンパイル&実行方法

    C:¥> javac Hello.java
    C:¥> java Hello

    実行結果

    Hello, JDBC Type1 World!
  9. Hello, ODP.NET World!

    Posted on 4月 3rd, 2012 by cx20

    ODP.NET

    ODP.NET(Oracle Data Provider for .NET)は、.NET ベースの Oracle Database 接続用 API である。ODAC(Oracle Data Access Component)と呼ばれるパッケージに含まれる。
    .NET 環境での Oracle Database 用データプロバイダとしては、マイクロソフト社が提供する「Microsoft Oracle Client」とオラクル社が提供する「ODP.NET」があるが、現在、「Microsoft Oracle Client」はマイクロソフト社自身が非推奨としており、今後は ODP.NET の使用が推奨されている。

    データプロバイダ 説明
    System.Data.OracleClient .NET Framework Data Provider for Oracle
    Oracle.DataAccess.Client Oracle Data Provider for .NET

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

    using System;
    using Oracle.DataAccess.Client;
     
    class Hello
    {
        static void Main( String[] args )
        {
            string conStr = "Data Source=ORCL;"
                + "User Id=scott;"
                + "Password=tiger";
     
            string sqlStr = "SELECT 'Hello, ODP.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#)

    C:¥> csc /r:Oracle.DataAccess.dll Hello.cs

    実行結果

    MESSAGE
    ---------------------
    Hello, ODP.NET World!
  10. Hello, oo4o World!

    Posted on 4月 2nd, 2012 by cx20

    oo4o

    oo4o(Oracle Objects for OLE)は、COM ベースの Oracle Database 接続用 API である。
    Windows 環境で VB による開発に用いられることが多い。

    ソースコード(VBScript + oo4o + Oracle)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim ses
        Dim db
        Dim rs
        Set ses = CreateObject("OracleInProcServer.XOraSession")
        Set db = ses.OpenDatabase( "ORCL", "scott/tiger", 0 )
        Set rs = db.CreateDynaset( "SELECT 'Hello, oo4o World!' AS Message FROM DUAL", 4)
        While NOT rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "------------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
       Wend
    End Sub

    実行方法(Windows)

    C:¥> CScript //Nologo Hello.vbs

    実行結果

    MESSAGE
    ------------------
    Hello, oo4o World!