Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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日目の投稿と同様に、必要なデータチェックをしてメール配信するようにしています

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away