Я пытаюсь использовать SqlDependency, и я читаю статьи Создание запроса на уведомление , Разрешения на уведомление о запросе от Microsoft. Я дважды проверил много раз, кажется, все отвечают тому, что нужно, что упоминается в статьях. Вот мой код.
private void InitialSqlDependency()
{
using (var connection = new SqlConnection(_connString))
{
connection.Open();
string message = string.Empty;
string query = @"SELECT ModifiedOn FROM [dbo].[ContainerTransactions]";
using (var command = new SqlCommand(query, connection))
{
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(Dependency_OnChange);
if (connection.State == ConnectionState.Closed)
connection.Open();
SqlDataReader dr = command.ExecuteReader();
if (dr.HasRows)
{
dr.Read();
message = dr[0].ToString();
}
}
}
}
private void Dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
_logger.Debug("ContainerWatch Dependency Fired!");
if (e.Type == SqlNotificationType.Change)
{
_logger.Debug("ContainerWatch Change Fired!");
this.InitialSqlDependency();
}
}
Тем не менее, всегда не удалось подписаться. И я вижу SqlNotificationInfo возвращает Query
, что означает A SELECT statement that cannot be notified or was provided.
Вот моя отладка img
Оператор SELECT предельно прост. Есть ли какая-либо возможная причина, вызывающая сбой?