This project is read-only.

目次

概要

PowerShell を利用してデータベースにアクセスするには、Soma.Core.PlainDbクラスを使用します。
PowerShell は.NET Framework 4で動作させる必要があります。

Soma.Core.PlainDb

Soma.Core.PlainDbクラスのシグネチャは以下の通りです。

シグネチャ
public class PlainDb
{
    // Constructors
    public PlainDb(IDbConfig config);

    // Fields
    internal IDbConfig config;
    internal DbImpl db;

    // Methods
    public override int Execute(string sql);
    public override int Execute(string sql, IDictionary condition);
    public override IList<IDictionary> Paginate(string sql, int offset, int limit);
    public override IList<IDictionary> Paginate(string sql, int offset, int limit, IDictionary condition);
    public override Tuple<IList<IDictionary>, long> PaginateAndCount(string sql, int offset, int limit);
    public override Tuple<IList<IDictionary>, long> PaginateAndCount(string sql, int offset, int limit, IDictionary condition);
    public override IEnumerable<IDictionary> PaginateOnDemand(string sql, int offset, int limit);
    public override IEnumerable<IDictionary> PaginateOnDemand(string sql, int offset, int limit, IDictionary condition);
    public override IList<IDictionary> Query(string sql);
    public override IList<IDictionary> Query(string sql, IDictionary condition);
    public override IEnumerable<IDictionary> QueryOnDemand(string sql);
    public override IEnumerable<IDictionary> QueryOnDemand(string sql, IDictionary condition);

    // Properties
    public override IDbConfig DbConfig { get; }
}

Soma.Core.PlainDbクラスの典型的な使い方を以下に示します。

典型的な利用例
$somaAssemblyPath = "$pwd\ps\Soma.Core.dll"

[void] [system.reflection.assembly]::LoadFrom($somaAssemblyPath)

$invariant = "System.Data.SqlClient"
$connectionString = "Data Source=.;Initial Catalog=tempdb;Integrated Security=True"
$dialect = new-object Soma.Core.MsSqlDialect
$config = new-object Soma.Core.PlainConfig $invariant, $connectionString, $dialect
$db = new-object Soma.Core.PlainDb $config

$setup = @"
drop table person;
create table person (
    id int identity primary key,
    name varchar(100),
    age int
);
insert into person (name, age) values ('aaa', 20);
insert into person (name, age) values ('bbb', 30);
insert into person (name, age) values ('ccc', 40);
"@

[void] $db.Execute($setup)

$db.Query("select * from person where id = /*id*/0", @{id = 2}) | % { new-object PSObject -property $_ } | format-table -auto | out-string

この例のポイントを説明します。
  • GACに登録していない場合はSoma.Core.dllを明示的にロードして使います(FSharp.Core.dllやFSharp.PowerPack.dllについてもGACに登録していない場合は明示的にロードする必要があります。)。
  • データベースの接続先に関する情報はSoma.Core.PlainConfigに設定します。
  • PlainDbクラスのQueryメソッドの第二引数の問い合わせ条件は連想配列で渡します。
  • Queryメソッドの戻り値はSystem.Collections.IDictionaryを要素とするSystem.Collections.Generic.IListです。
  • Queryメソッドの戻り値のIListの要素のIDictionaryは、PSObjectに変換すると表示の際に見やすくなります。

Last edited May 29, 2011 at 1:32 PM by toshihiro, version 6

Comments

No comments yet.