启动sql依赖项时对象名称无效

本文关键字:无效 对象 sql 依赖 启动 | 更新日期: 2023-09-27 18:20:15

这是我的代码

SqlDependency.Start(GetConnectionString(), getQuery());

其中getQuery()为:

private string getQuery() {
            return "SELECT firstName, lastName FROM dbo.Customer";
        }

我得到了这个例外:

Invalid object name 'SELECT firstName, lastName FROM dbo.Customer'.

更新

    private string getQuery() {
        return "SELECT firstName, lastName FROM dbo.Customer";
    }
    public void Initialization()
    {
        // Create a dependency connection.
        SqlDependency.Start(GetConnectionString(), getQuery());
    }

    public void SomeMethod()
    {
        // Assume connection is an open SqlConnection.
        // Create a new SqlCommand object.
        using (SqlCommand command = new SqlCommand(
            getQuery(),
            new SqlConnection(GetConnectionString())))
        {
            // Create a dependency and associate it with the SqlCommand.
            SqlDependency dependency = new SqlDependency(command);
            // Maintain the refence in a class member.
            // Subscribe to the SqlDependency event.
            dependency.OnChange += new
               OnChangeEventHandler(OnDependencyChange);
            // Execute the command.
            using (SqlDataReader reader = command.ExecuteReader())
            {
                // Process the DataReader.
            }
        }
    }

然后从外面,我这样做:

printing p = new printing();
            p.Initialization();
            p.SomeMethod();

启动sql依赖项时对象名称无效

您使用的是SqlDependency.Start(string, string)重载,其中第二个字符串表示队列名称。'SELECT firstName, lastName FROM dbo.Customer'不是有效的队列名称。

您需要为查询创建一个SqlCommand,并将其注入构造函数:

var dependencyCommand = new SqlCommand();
dependencyCommand.CommandText = getQuery();
sqlDependency = new SqlDependency(dependencyCommand);
sqlDependency.Start(GetConnectionString());

至于你的编辑,你已经这么做了。只需删除SqlDependency.Start()的第二个参数。