为什么我会收到 SqlDependency 的子查询错误

本文关键字:查询 错误 SqlDependency 为什么 | 更新日期: 2023-09-27 18:36:00

我的数据库管理员昨天不得不进行一些权限/所有权更改。以前,我的 SqlDependency 代码运行良好。

但是现在有一个我认为是凭据问题(我相信这一点,因为我在长时间的网络搜索后看到了一个小纸条)。

我使用此连接字符串成功连接到 MS SQL:

        connectionString = @"user id=billybob;" +
                                    @"password=bigsecret;" +
                                   "server=11.2.133.8;" +
                                   "Trusted_Connection=no;" +
                                   "database=MYDB; " +
                                   "MultipleActiveResultSets=true;" +
                                   "connection timeout=30";

然后我尝试使用以下命令启动 SqlDependency :

SqlDependency.Start(connectionString, null);

但是我收到此错误:

System.Data.SqlClient.SqlException was unhandle HResult=-2146232060 消息 = 子查询返回了超过 1 个值。这是不允许的 当子查询跟在 =、!=、<、<= 、>、>= 之后或子查询 用作表达式。该语句已终止。

可能是什么问题?

基兰尼的更完整跟踪:

子查询返回了 1 个以上的值。在以下情况下不允许这样做 子查询跟随 =、!=、<、<= 、>、>= 或当子查询用作 一个表达式。该语句已终止。 在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, 布尔中断连接,操作1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource 1 完成, 字符串方法名称, 布尔发送到管道, Int32 超时, 布尔异步写入) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at SqlDependencyProcessDispatcher.SqlConnectionContainer.CreateQueueAndService(Boolean 重新启动)在 SqlDependencyProcessDispatcher.SqlConnectionContainer..ctor(SqlConnectionContainerHashHelper hashHelper, String appDomainKey, Boolean useDefaults) at SqlDependencyProcessDispatcher.Start(String connectionString, String& server, DbConnectionPoolIdentity& identity, String& user, String& database, String& queueService, String appDomainKey, SqlDependencyPerAppDomainDispatcher dispatcher, Boolean& errorHappen, Boolean& appDomainStart, Boolean useDefaults) at SqlDependencyProcessDispatcher.StartWithDefault(String connectionString, String& server, DbConnectionPoolIdentity& identity, String& user, String& database, String& service, String appDomainKey, SqlDependencyPerAppDomainDispatcher dispatcher, Boolean& errorHappen, Boolean&appDomainStart) at System.Data.SqlClient.SqlDependency.Start(String connectionString, 字符串队列,布尔值使用默认值)

这是调用它的代码:

请在创建查询之前发生注释错误!

public void InitialiseDependency(Action onDependencyMethod)
{
    this.onDependencyMethod = onDependencyMethod;
    SqlDependency.Start(connectionString, null); //<<<< ERROR ON THIS LINE
    using (SqlCommand command = new SqlCommand(
            "SELECT [Symbol] FROM [dbo].[tbls] WHERE [Status] = 'NEW'",
            conn))
    {
        SqlDependency dependency = new SqlDependency(command);

        dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
        using (SqlDataReader reader = command.ExecuteReader())
        {
            // Process the DataReader.
        }
    }
}

为什么我会收到 SqlDependency 的子查询错误

最终我们删除并重新创建了用户"billybob"。一旦我们这样做,错误就消失了......