Archive for the ‘.NET’ Category

  1. Hello, ODP.NET(IronRuby) World!

    Posted on 2月 14th, 2013 by cx20

    ODP.NET(IronRuby)

    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

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

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    require 'Oracle.DataAccess'
     
    include System
    include System::Data
    include Oracle::DataAccess::Client
     
    conStr = "Data Source=ORCL;User ID=scott;Password=tiger"
    sqlStr = "SELECT 'Hello, ODP.NET World!' AS Message FROM DUAL"
     
    con = OracleConnection.new(conStr)
    cmd = OracleCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    コンパイル方法

    C:¥> ir Hello.rb

    実行結果

    MESSAGE
    ---------------------
    Hello, ODP.NET World!
  2. Hello, ADO.NET(IronRuby) World!

    Posted on 2月 13th, 2013 by cx20

    ADO.NET(IronRuby)

    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

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

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    include System
    include System::Data
    include System::Data::OleDb
     
    conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=hello.mdb;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OleDbConnection.new(conStr)
    cmd = OleDbCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

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

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    include System
    include System::Data
    include System::Data::OleDb
     
    conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=hello.accdb;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OleDbConnection.new(conStr)
    cmd = OleDbCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

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

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    include System
    include System::Data
    include System::Data::SqlClient
     
    conStr = "SERVER=(local);DATABASE=master;UID=sa;PWD=P@ssW0rd;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = SqlConnection.new(conStr)
    cmd = SqlCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

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

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    require 'System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
     
    include System
    include System::Data
    include System::Data::OracleClient
     
    conStr = "Data Source=ORCL;User ID=scott;Password=tiger"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message FROM DUAL"
     
    con = OracleConnection.new(conStr)
    cmd = OracleCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

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

    require 'mscorlib'
    require 'System'
    require 'System.Data'
    include System
    include System::Data::Odbc
     
    conStr = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OdbcConnection.new(conStr)
    cmd = OdbcCommand.new(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read() do
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
    end
     
    reader.Close()
    con.Close()

    実行方法(64bit OLE DB 使用時)

    C:¥> ir64 Hello.rb

    実行方法(上記以外)

    C:¥> ir Hello.rb

    実行結果

    Message
    ---------------------
    Hello, ADO.NET World!
  3. Hello, ODP.NET(IronPython) World!

    Posted on 2月 12th, 2013 by cx20

    ODP.NET(IronPython)

    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

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

    import clr
    clr.AddReference("System.Data")
    clr.AddReference("Oracle.DataAccess")
    from System import *
    from Oracle.DataAccess.Client import *
     
    conStr = "Data Source=ORCL;User ID=scott;Password=tiger"
    sqlStr = "SELECT 'Hello, ODP.NET World!' AS Message FROM DUAL"
     
    con = OracleConnection(conStr)
    cmd = OracleCommand(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read():
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
     
    reader.Close()
    con.Close()

    コンパイル方法

    C:¥> ipy Hello.py

    実行結果

    MESSAGE
    ---------------------
    Hello, ODP.NET World!
  4. Hello, ADO.NET(IronPython) World!

    Posted on 2月 11th, 2013 by cx20

    ADO.NET(IronPython)

    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

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

    import clr
    clr.AddReference("System.Data")
    from System import *
    from System.Data.OleDb import *
     
    conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=hello.mdb;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OleDbConnection(conStr)
    cmd = OleDbCommand(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read():
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
     
    reader.Close()
    con.Close()

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

    import clr
    clr.AddReference("System.Data")
    from System import *
    from System.Data.OleDb import *
     
    conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=hello.accdb;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OleDbConnection(conStr)
    cmd = OleDbCommand(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read():
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
     
    reader.Close()
    con.Close()

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

    import clr
    clr.AddReference("System.Data")
    from System import *
    from System.Data.SqlClient import *
     
    conStr = "SERVER=(local);DATABASE=master;UID=sa;PWD=P@ssW0rd;"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = SqlConnection(conStr)
    cmd = SqlCommand(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read():
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
     
    reader.Close()
    con.Close()

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

    import clr
    clr.AddReference("System.Data")
    clr.AddReference("System.Data.OracleClient")
    from System import *
    from System.Data.OracleClient import *
     
    conStr = "Data Source=ORCL;User ID=scott;Password=tiger"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message FROM DUAL"
     
    con = OracleConnection(conStr)
    cmd = OracleCommand(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read():
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
     
    reader.Close()
    con.Close()

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

    import clr
    clr.AddReference("System.Data")
    from System import *
    from System.Data.Odbc import *
     
    conStr = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd"
    sqlStr = "SELECT 'Hello, ADO.NET World!' AS Message"
     
    con = OdbcConnection(conStr)
    cmd = OdbcCommand(sqlStr, con)
    con.Open()
     
    reader = cmd.ExecuteReader()
    while reader.Read():
        Console.WriteLine( reader.GetName(0) )
        Console.WriteLine( "---------------------" )
        Console.WriteLine( reader.GetValue(0) )
     
    reader.Close()
    con.Close()

    実行方法(64bit OLE DB 使用時)

    C:¥> ipy64 Hello.py

    実行方法(上記以外)

    C:¥> ipy Hello.py

    実行結果

    Message
    ---------------------
    Hello, ADO.NET World!
  5. Hello, COM(Oxygene) World!

    Posted on 2月 10th, 2013 by cx20

    COM(Oxygene)

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    以下は Oxygene による COM クライアントの例となっている。

    ソースコード(実行時バインディング)

    namespace hello;
     
    interface
    uses
        System,
        System.Reflection,
        System.Runtime.InteropServices;
     
    type
        Hello = class
    public
        class method Main(args: array of String): Integer;
    end;
     
    implementation
     
    class method Hello.Main(args: array of String): Integer;
    var
        objType: System.Type;
        shell: Object;
        param: array of Object;
        folder: Object;
    begin
        objType := System.Type.GetTypeFromProgID("Shell.Application"); 
        shell := Activator.CreateInstance(objType);
        param := [ 0, "Hello, COM(Oxygene) World!", 0, 36 ];
        folder := shell.GetType().InvokeMember( "BrowseForFolder", BindingFlags.InvokeMethod, nil, shell, param );
        if folder  nil then begin
            Marshal.ReleaseComObject(folder);
        end;
        Marshal.ReleaseComObject(shell);
    end;
     
    end.

    コンパイル方法(実行時バインディング)

    C:¥> oxygene Hello.pas

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(Oxygene) Wolrd!             |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+
  6. Hello, COM(Nemerle) World!

    Posted on 2月 9th, 2013 by cx20

    COM(Nemerle)

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    以下は Nemerle による COM クライアントの例となっている。

    ソースコード(実行時バインディング)

    using System;
    using System.Reflection;
    using System.Runtime.InteropServices;
     
    class Hello {
        public static Main() : void {
            def objType = Type.GetTypeFromProgID("Shell.Application"); 
            def shell = Activator.CreateInstance(objType);
            def hwnd = 0;
            def title = "Hello, COM(Nemerle) World!" : object;
            def option = 0;
            def rootFolder = 36;
            def param = array[ hwnd, title, option, rootFolder ];
            def folder = shell.GetType().InvokeMember( 
                "BrowseForFolder", BindingFlags.InvokeMethod, null, shell, param );
            when (folder != null)
            {
                _ = Marshal.ReleaseComObject(folder);
            }
            _ = Marshal.ReleaseComObject(shell);
        }
    }

    コンパイル方法(実行時バインディング)

    C:¥> ncc -o Hello.exe Hello.n

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(Nemerle) Wolrd!             |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+
  7. Hello, COM(Boo) World!

    Posted on 2月 8th, 2013 by cx20

    COM(Boo)

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    以下は Boo による COM クライアントの例となっている。

    ソースコード(実行時バインディング)

    import System
    import System.Reflection
    import System.Runtime.InteropServices
     
    [STAThread]
    def Main(argv as (string)):
        objType = Type.GetTypeFromProgID("Shell.Application") 
        shell = Activator.CreateInstance(objType)
        param as (object) = ( 0, "Hello, COM(Boo) World!", 0, 36 )
        folder = shell.GetType().InvokeMember( "BrowseForFolder", BindingFlags.InvokeMethod, null, shell, param )
        if (folder != null):
            Marshal.ReleaseComObject(folder)
        Marshal.ReleaseComObject(shell)

    コンパイル方法(実行時バインディング)

    C:¥> booc Hello.boo

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(Boo) Wolrd!                 |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+
  8. Hello, COM(Cobra) World!

    Posted on 2月 6th, 2013 by cx20

    COM(Cobra)

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    以下は Cobra による COM クライアントの例となっている。

    ソースコード(実行時バインディング)

    use System
    use System.Reflection
    use System.Runtime.InteropServices
     
    class Program
        def main is shared
            objType = Type.getTypeFromProgID("Shell.Application") 
            shell = Activator.createInstance(objType)
            param = @[ 0, "Hello, COM(Cobra) World!", 0, 36 ]
            folder = shell.getType.invokeMember( 
                "BrowseForFolder", BindingFlags.InvokeMethod, nil, shell, param )
            if folder  nil
                Marshal.releaseComObject(folder)
            Marshal.releaseComObject(shell)

    コンパイル方法(実行時バインディング)

    C:¥> cobra -compile Hello.cobra

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(Cobra) Wolrd!               |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+
  9. Hello, COM(IronRuby) World!

    Posted on 2月 2nd, 2013 by cx20

    COM(IronRuby)

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    以下は IronRuby による COM クライアントの例となっている。

    ソースコード(実行時バインディング)

    require 'mscorlib'
    include System
    include System::Reflection
    include System::Runtime::InteropServices
     
    objType = System::Type.GetTypeFromProgID("Shell.Application")
    shell = System::Activator.CreateInstance(objType)
     
    hwnd = 0
    title = "Hello, COM(IronRuby) World!".to_clr_string
    option = 0
    rootFolder = 36
    params = System::Array[System::Object].new [hwnd, title, option, rootFolder]
     
    folder = shell.GetType().InvokeMember( "BrowseForFolder", BindingFlags.InvokeMethod, nil, shell, params )
    if folder != nil then
        System::Runtime::InteropServices::Marshal.ReleaseComObject(folder)
    end
    System::Runtime::InteropServices::Marshal.ReleaseComObject(shell)

    コンパイル方法(実行時バインディング)

    C:¥> ir Hello.rb

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(IronRuby) Wolrd!            |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+
  10. Hello, COM(IronPython) World!

    Posted on 2月 1st, 2013 by cx20

    COM(IronPython)

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    以下は IronPython による COM クライアントの例となっている。

    ソースコード(実行時バインディング)

    import System
    from System.Reflection import BindingFlags
    from System.Runtime.InteropServices import Marshal
     
    objType = System.Type.GetTypeFromProgID("Shell.Application")
    shell = System.Activator.CreateInstance(objType)
    param = System.Array[System.Object]([ 0, "Hello, COM(IronPython) World!", 0, 36 ])
    folder = shell.GetType().InvokeMember( "BrowseForFolder", BindingFlags.InvokeMethod, None, shell, param )
    if folder != None:
        Marshal.ReleaseComObject(folder)
    Marshal.ReleaseComObject(shell)

    コンパイル方法(実行時バインディング)

    C:¥> ipy Hello.py

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(IronPython) Wolrd!          |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+