サードパーティのデータベースの変更を監視する必要があるプロジェクトがあります。
SqlDependencyは良い解決策のように見えますが、サードパーティのアプリケーションで次のエラーが発生します。
次のSETオプションの設定が正しくないため、INSERTが失敗しました:'ANSI_NULLS、QUOTED_IDENTIFIER、ANSI_PADDING'。SETオプションが、インデックス付きビューおよび/または計算列のインデックスおよび/またはフィルター処理されたインデックスおよび/またはクエリ通知および/またはXMLデータ型メソッドおよび/または空間インデックス操作での使用に適していることを確認します。
(以下のテストプログラムが実行されていない場合、アプリケーションは正常に動作します)
これはどのSETオプションを参照していますか?
私が行った唯一の設定操作はALTER DATABASE TestDb SET ENABLE_BROKER
、通知を有効にすることです。
私もしました:
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
これが、ManagementStudioでレコードを挿入/更新/削除すると正常に機能するLinqpadテストコードです。
void Main() {
const string cs = "Data Source=.;Initial Catalog=TestDb;Trusted_Connection=True";
var are = new AutoResetEvent(false);
using (var connection = new SqlConnection(cs)) {
connection.Open();
SqlDependency.Start(cs);
using (var cmd = new SqlCommand()) {
cmd.Connection = connection;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT orderNo FROM dbo.Orders WHERE ProductNo = '111'";
var dep = new SqlDependency(cmd, null, 60);
dep.OnChange += (s,e) => {
Console.WriteLine(e.Info);
are.Set();
};
using (var reader = cmd.ExecuteReader()) {
while (reader.Read()) {
}
}
are.WaitOne();
SqlDependency.Stop(cs);
}
}
}
サードパーティのアプリがデータベースに接続する方法がわかりません。また、変更することもできません。さらに情報が必要な場合は、SQLプロファイラーを実行できます。