DbSharpApplication -ver9.1- の使い方

Higtyのシステムの作り方

DbSharpApplicationとは?

DbSharpApplicationはストアドプロシージャを呼び出すC#のクラスを自動生成するツールです。

強く型付けされたC#のクラスが生成され、メソッドで簡単にストアドプロシージャを呼び出すことができます。

ユーザー定義型、TVP(Table Value Parameter)の対応、Enum型など様々な機能もあり、型安全でパフォーマンスの高いコードを生成します。



ダウンロード

ダウンロードのリンクはGitHubにあります。

https://github.com/higty/higlabo


それぞれのバージョンのダウンロードリンクです。

https://static.tinybetter.com/higlabo/DbSharpApplication/DbSharpApplication_9_1_0_0.zip


ダウンロード後、解凍してフォルダ内のDbSharpApplication.exeをクリックすると立ち上がります。



使い方

以下のような画面が立ち上がります。



ConfigData.xmlには

・前回のスキーマファイルのパス

・これまでに作成したスキーマファイルの一覧

・接続文字列

の情報が保存されます。


まずは処理対象のデータベースの接続文字列を設定しましょう。

左下の追加ボタンで接続の情報を追加できます。


次にPlaygroundタブに移動して生成の設定を追加します。

名前をDbSharpSample_SqlServerにしてみました。


ストアドのロードボタンを押すとデータベースに定義されているストアドプロシージャの一覧が取得できます。


生成ボタンを押すと生成ウィンドウが立ち上がります。


引数でEnumを使用する場合はEnumNameの設定をしましょう。また出力先フォルダ、C#の名前空間、C#のデータベースキーの設定をします。

生成ボタンを押すと指定した出力先にC#のソースコードが生成されます。


ストアドプロシージャとユーザー定義型はそれぞれ

>指定した出力先フォルダ\StoredProcedure

>指定した出力先フォルダ\UserDefinedTableType

に出力されます。




C#のプロジェクトを構成する

生成されたC#を活用するサンプルコードは以下にあります。

https://github.com/higty/higlabo/tree/master/Net9/HigLabo.DbSharp.Sample


この記事ではこのサンプルプロジェクトを作る方法を順を追って説明をしていきます。


クラスライブラリの作成

出力したファイルをクラスライブラリで使えるように設定していきます。クラスライブラリプロジェクトを作成し、生成したC#ファイルを追加します。


Nugetから以下のパッケージを追加します。(HigLabo.Data.Mapperはなくても大丈夫です)

これでコンパイルができます。


コンソールアプリでストアドプロシージャを実行する

コンソールアプリを作って今作成したクラスライブラリを参照して必要なNugetPackageを設定します。

以下のような形でタイプセーフなクラスを使用して簡単にストアドプロシージャが呼び出せます。


using HigLabo.Data;
using HigLabo.DbSharp;
using HigLabo.DbSharpSample.SqlServer;

namespace DbSharpSampleApp.MultiDatabase;

internal class Program
{
    static async Task Main(string[] args)
    {
        StoredProcedure.DatabaseFactory.SetCreateDatabaseMethod("MyDatabaseKey", () => new SqlServerDatabase("My connection string..."));

        var sp = new Usp_Structure();
        sp.BigIntColumn = 1;
        //User defined table type parameter. TVP(table value parameter)
        var r = new MyTableType.Record();
        r.BigIntColumn = 2;
        sp.StructuredColumn.Records.Add(r);
        var spResult = await sp.ExecuteNonQueryAsync();

        var sp1 = new Usp_SelectMultiTable();
        var resultSetList = await sp1.GetResultSetsListAsync();
        foreach (var item in resultSetList.ResultSetList)
        {
            //Do something...
            Console.WriteLine(item.BigIntColumn);
        }
        foreach (var item in resultSetList.ResultSet1List)
        {
            //Do something...
            Console.WriteLine(item.NVarCharColumn);
        }
        foreach (var item in resultSetList.ResultSet2List)
        {
            //Do something...
        }
    }
}