22
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

gloopsAdvent Calendar 2016

Day 21

LINQPadで別DBサーバのテーブルを扱ったお話

Posted at

gloops Advent Calendar 21日目:sunny:

gloops Advent Calendar2016も21日目に突入しました!
毎日エンジニアが頑張って投稿してくれているので無事に完走できそうです:thumbsup:

21日目は本日で誕生日を迎え40代に一歩近付いたy_nakaiが担当致します
普段はマネジメント業務をやっていてめっきりコードに触れることが減っているので小ネタになります
C#エンジニアなら一度は触れるであろう【LINQPad】についてです

背景

gloops Advent Calendar1日目にて紹介されたデータチェック方法について、
【LINQPad】を使用してデータ参照してメールで通知という方法も採用しております
今回は複数のDBサーバを跨って参照する際に行ったことを記します

LINQPadデフォルトだとスキーマ1個しか参照できない問題

LINQPadで参照できるスキーマってデフォルトだと1個だけで、
現在参照しているスキーマとは別スキーマからテーブルをD&Dするとスキーマ情報が変更されてしまいますよね
movie1.gif

そんな時、簡単に別スキーマ情報を追加することができるんです!

方法:左側のスキーマビューから、追加したいスキーマをCtrlを押しながらコード書いてるところにD&D

あら、簡単!
するとスキーマビューに新たな接続が追加されるので、参照したいテーブルをD&DすればOKです
movie2.gif

もちろん3つ以上スキーマを追加することが可能です!

だがしかし!これだと別サーバのDB参照できない問題

Ctrl押しながら追加できるなんて簡単やん
って試しに別サーバのテーブルをD&Dしたらエラーが発生しました
pic003.PNG

別サーバの場合は「linked servers」設定を入れなくてはいけないとのこと

リンクサーバーの作成方法はこちら
https://technet.microsoft.com/ja-jp/library/ff772782(v=sql.105).aspx

う~ん、インフラに相談が必要ですね・・・

Dapper使えば解決!

結局、自作しちゃったほうが早そうですね
Dapperを使ってみます

まずNuGet Package Manager(Ctrl+Shift+Pで起動)から「Dapper dot net」をAddして下さい
※注:Nuget integrationはDeveloper以上のライセンスが必要です
https://www.linqpad.net/Purchase.aspx

あとはDapperを使ったコードを書くだけです
簡単なサンプルを載せておきます

sample.cs

private const string ConnectionString = "xxx";

void Main()
{
    GetDataById(5).Dump();
}

public IEnumerable<User> GetDataById(int id)
{
    IEnumerable<User> resultList;

    using (var conn = new SqlConnection(ConnectionString))
    {
        const string sql = @"SELECT [Id], [UserName], [GroupNo] FROM User WHERE [Id] = @Id";

        conn.Open();
        resultList = conn.Query<User>(sql, new { Id = id });
        conn.Close();
    }

    return resultList;
}

public class User
{
    public int Id { get; set; }
    public string UserName { get; set; }
    public int GroupNo { get; set; }
}

簡単にアクセスできました
同様に別DBについての記述をすればサーバを跨いだチェックが可能となります

こんな感じで、
gloops Advent Calendar1日目の投稿と同様に、必要なデータチェックをしてメール配信するようにしています

22
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?