■102709 / inTopicNo.4) |
Re[1]: sqldependencyの使用方法 |
□投稿者/ WebSurfer (2844回)-(2023/12/13(Wed) 10:39:58)
|
■No102703 (初心者 さん) に返信
質問者さん、No102704 に返事をしないので何だかいろいろ不明ですが・・・
> コンソールアプリを作成していますが、
ということなので、とりあえずコンソールアプリで SQL Server のクエリ通知が確認できれ
ば良いということと理解して、動くコードを貼っておきます。
コードは C# ですが、読めなければ C# ⇒ VB.NET 変換サービスを使ってください。
Telerik Code Converter
https://converter.telerik.com/
using System;
using System.Data.SqlClient;
namespace ConsoleAppSqlDependency
{
internal class Program
{
static void Main(string[] args)
{
string connstring = @"Data Source=lpc:(local)\sqlexpress;
Initial Catalog=SqlDependency;
Integrated Security=True";
// SELECT クエリのテーブル名は dbo.Products とすること。
// Products とか SqlDependency.dbo.Products ではクエリ通知の
// サブスクリプションに失敗する。
string query = "SELECT ProductID,Name,UnitPrice,Quantity " +
"FROM dbo.Products";
SqlDependency.Start(connstring);
using (SqlConnection conn = new SqlConnection(connstring))
using (SqlCommand cmd = new SqlCommand(query, conn))
{
conn.Open();
SqlDependency dependency = new SqlDependency(cmd);
dependency.OnChange += Dependency_OnChange;
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
Console.WriteLine($"{rdr[0]}, {rdr[1]}, " +
$"{rdr[2]}, {rdr[3]}");
}
}
}
Console.WriteLine("Press Enter to continue");
Console.ReadLine();
SqlDependency.Stop(connstring);
}
private static void Dependency_OnChange(object sender,
SqlNotificationEventArgs e)
{
Console.WriteLine("result has changed");
Console.WriteLine("Source " + e.Source);
Console.WriteLine("Type " + e.Type);
Console.WriteLine("Info " + e.Info);
}
}
}
結果は以下のようになります。Press Enter to continue と表示されたら SMSS などを使っ
て当該テーブルを変更すると SqlDependency.OnChange イベントが発生し、上のコードのハ
ンドラでコンソールに result has changed 以降の行が書き込まれます。
1, Orange, 135.00, 20
9, Banana, 130.00, 15
10, Apple, 330.00, 20
13, Grape, 125.00, 35
Press Enter to continue
result has changed
Source Data
Type Change
Info Update
データベースとテーブルは以下の記事の「(1) サンプルデータベースとテーブルの作成」の
セクションに書いたものです。
SignalR と SqlDependency
http://surferonwww.info/BlogEngine/post/2021/12/26/signalr-and-sqldependency-on-aspnet-web-application.aspx
上の記事にも書きましたが、クエリ通知はサービスブローカを使用するため、データベース
に対して条件がありますので注意してください。
最終的には ASP.NET で使いたいのではないかと想像して、参考になりそうな記事を紹介し
ておきます。
ASP.NET Core で SqlDependency
http://surferonwww.info/BlogEngine/post/2022/01/01/use-of-sqldependency-in-aspnet-core-application.aspx
ASP.NET Core で SQL キャッシュ依存関係
http://surferonwww.info/BlogEngine/post/2022/01/06/sql-cache-dependency-in-aspnet-core-application.aspx
|
|