這是我第一次需要使用SqlDependency,所以我希望它是我犯的一個愚蠢的錯誤。SqlDependency OnChange沒有觸發
我遇到的問題是OnChanged事件不會在sql表更改時觸發。沒有錯誤或任何事情,只是它不會觸發。
下面是代碼
public class SqlWatcher
{
private const string SqlConnectionString = "Data Source = CN-PC08\\DEV; Initial Catalog=DEP; User = sa; Password=******";
public SqlWatcher()
{
SqlClientPermission perm = new SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted);
perm.Demand();
SqlCommand cmd = new SqlCommand("SELECT [DataAvaliable], [RowNumber] FROM [dbo].[Trigger]", new SqlConnection(SqlConnectionString));
SqlDependency sqlDependency = new SqlDependency(cmd);
sqlDependency.OnChange += On_SqlBitChanged;
}
private void On_SqlBitChanged(object sender, SqlNotificationEventArgs sqlNotificationEventArgs)
{
SqlDependency dependency = (SqlDependency)sender;
dependency.OnChange -= On_SqlBitChanged;
// Fire the event
if (NewMessage != null)
{
NewMessage(this, new EventArgs());
}
}
public void Start()
{
SqlDependency.Start(SqlConnectionString);
}
public void Stop()
{
SqlDependency.Stop(SqlConnectionString);
}
public event EventHandler NewMessage;
而在我的主窗口,我有這個
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
try
{
SqlWatcher sqlWatcher = new SqlWatcher();
sqlWatcher.Start();
sqlWatcher.NewMessage += On_NewMessage;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void On_NewMessage(object sender, EventArgs eventArgs)
{
MessageBox.Show("Message Received");
}
}
因此,預期的行爲是,如果我運行下面的SQLQuery一個消息框將顯示說「消息收到「
INSERT INTO [DEP].[dbo].[Trigger] Values(0,3)
任何人都可以給我一個提示什麼檢查/更改?
我知道只有Sql特性的一個子集可以在依賴中使用,但我不認爲我想在這裏做任何事情。
認爲任何人試圖尋找sqldependency的解決方法,應使用sqldependencyEx。簡單的連接步驟可以在這裏找到。 https://github.com/dyatchenko/ServiceBrokerListener – kepung 2017-04-19 22:41:21