我有一個項目,我需要監視第三方數據庫中的更改。SqlDependency在其他應用程序中導致錯誤
SqlDependency似乎是一個很好的解決方案,但它會在第三方應用程序中導致以下錯誤。
INSERT失敗,因爲下列SET選項不正確 設置: 'ANSI_NULLS,QUOTED_IDENTIFIER,ANSI_PADDING'。驗證用於索引視圖和/或 計算列和/或過濾索引和/或查詢通知 和/或XML數據類型方法和/或空間索引操作的索引的SET選項是否正確。
這是否指的是什麼SET選項
(下面時,我的測試程序沒有運行該應用程序正常工作)?
我已經完成的唯一設置操作是ALTER DATABASE TestDb SET ENABLE_BROKER
以啓用通知。
我也做:
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
這裏是我的Linqpad測試代碼,如果我在Management Studio中插入/更新/刪除記錄,工作正常。
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分析器。
謝謝,我不明白查詢必須運行與通知請求相同的選項。應用程序確實將其中的一些設置爲關閉。 – adrianm
SQL依賴關係連接是需要SET ARITHABORT ON的連接。使用第三方數據庫意味着我很猶豫要將數據庫級別的值設置爲適當的值。我仍在研究是否可以爲特定用戶授予默認值。 – BrandonG