gloops Advent Calendar 21日目
gloops Advent Calendar2016も21日目に突入しました!
毎日エンジニアが頑張って投稿してくれているので無事に完走できそうです
21日目は本日で誕生日を迎え40代に一歩近付いたy_nakaiが担当致します
普段はマネジメント業務をやっていてめっきりコードに触れることが減っているので小ネタになります
C#エンジニアなら一度は触れるであろう【LINQPad】についてです
背景
gloops Advent Calendar1日目にて紹介されたデータチェック方法について、
【LINQPad】を使用してデータ参照してメールで通知という方法も採用しております
今回は複数のDBサーバを跨って参照する際に行ったことを記します
LINQPadデフォルトだとスキーマ1個しか参照できない問題
LINQPadで参照できるスキーマってデフォルトだと1個だけで、
現在参照しているスキーマとは別スキーマからテーブルをD&Dするとスキーマ情報が変更されてしまいますよね
そんな時、簡単に別スキーマ情報を追加することができるんです!
方法:左側のスキーマビューから、追加したいスキーマをCtrlを押しながらコード書いてるところにD&D
あら、簡単!
するとスキーマビューに新たな接続が追加されるので、参照したいテーブルをD&DすればOKです
もちろん3つ以上スキーマを追加することが可能です!
だがしかし!これだと別サーバのDB参照できない問題
Ctrl押しながら追加できるなんて簡単やん
って試しに別サーバのテーブルをD&Dしたらエラーが発生しました
別サーバの場合は「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を使ったコードを書くだけです
簡単なサンプルを載せておきます
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日目の投稿と同様に、必要なデータチェックをしてメール配信するようにしています