关于不工作的SqlDependency的另一篇文章

时间:2016-09-12 08:36:28

标签: c# sql-server

我知道,我知道有很多关于这个主题的出版物,但没有一个能解决我的问题,这个问题就像运动一样简单,没什么特别的。 基本上,所有关于无效SqlDependency的Google结果,无论是在SO还是其他任何地方都遵循相同的方法。我遵循的最后一个位于here。在这里:

在数据库级别启用SQL Service Broker

ALTER DATABASE Test SET ENABLE_BROKER

结果通过以下方式验证:

SELECT Name, is_broker_enabled FROM sys.databases

这一切看起来都像mi一样。

接下来是C#代码。我创建了一个控制台应用程序,所有内容都发生在static void Main(...

    static void Main(string[] args)
    {
        if (CanRequestNotifications())
        {
            var cs = ConfigurationManager.ConnectionStrings["Test"].ConnectionString;
            SqlDependency.Stop(cs);
            SqlDependency.Start(cs);

            using (var cnn = new SqlConnection(cs))
            using (var cmd = cnn.CreateCommand())
            {
                cnn.Open();
                cmd.CommandText = "SELECT Id, Name FROM [dbo].[Device]";
                cmd.Notification = null;

                var x = new SqlDependency();
                x.OnChange += X_OnChange;

                using (var r = cmd.ExecuteReader())
                {

                }

                Console.ReadLine();
            }

            SqlDependency.Stop(cs);

        }
        else
        {
            Console.WriteLine("Access denied.");
            Console.ReadLine();
        }
    }

    static bool CanRequestNotifications()
    {
        var result = false;

        var perm = new SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted);

        try
        {
            perm.Demand();
            result = true;
        }
        catch (Exception)
        {

            throw;
        }

        return result;
    }

    private static void X_OnChange(object sender, SqlNotificationEventArgs e)
    {
        Console.WriteLine("{0}: ChangeDetected...", DateTime.Now);
    }

正如你所看到的那样,这不是一个权限问题,因为我检查了之前启动监听器的情况。

我的配置是这样的:

<connectionStrings>
    <add name="Test" providerName="System.Data.SqlClient"
        connectionString="Data Source=(localdb)\v11.0;
            Initial Catalog=TEST;Integrated Security=True" />
</connectionStrings>

我在多篇文章中读到,经纪人可以使用MS SQL服务器的快速版本正常工作;我尝试了SQL Express 2014和MSSQLLocalDB - 相同的区别。我正在使用VS 2015,并且我通过其SQL Server对象资源管理器发出命令(这有关系吗?)在程序启动后按F5 - 调试模式。我得到的只是一个空白的控制台;没有错误,没有任何错误。然后我在VS中从SSOE执行以下语句但仍然没有:

INSERT INTO Device(Name, MakerId, ComputerId) VALUES ('dfhj', 1, 1)

UPDATE [dbo].[Device] SET Name = 'dfhdfh' WHERE Id = 1

有什么问题?

0 个答案:

没有答案