Почему я получаю ошибку подзапроса с SqlDependency

Вчера моему администратору БД пришлось внести некоторые изменения в правах/владельцах. Предыдущий мой код 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 не было обработано HResult=-2146232060 Message=Подзапрос вернул более 1 значения. Это не разрешено, когда подзапрос следует за =, !=, ‹, ‹= , >, >= или когда подзапрос используется как выражение. Заявление было прекращено.

В чем может быть проблема?

Полная трассировка для Килэнни:

Подзапрос вернул более 1 значения. Это не разрешено, когда подзапрос следует за =, !=, ‹, ‹= , >, >= или когда подзапрос используется как выражение. Заявление было прекращено. в System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое значение breakConnection, завершение Action1 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(TaskCompletionSource1, строковое имя метода, логическое значение sendToPipe, время ожидания Int32, логическое значение asyncWrite) в System.Data.SqlClient.SqlCommand.ExecuteNonQuery() в SqlDependencyProcessDispatcher.SqlConnectionContainer.CreateQueueAndService (Логический перезапуск) в SqlDependencyProcessDispatcher.SqlConnectionContainer..ctor(SqlConnectionContainerHashHelper hashHelper, String appDomainKey, Boolean useDefaults) в SqlDependencyProcessDispatcher.Start(String connectionString, String& server, DbConnectionPoolIdentity& identity, String& user, String& database, String& queueService, String appDomainKey, SqlQueueService, String appDomainDemainKey, SqlDependencyProcessDispatcher. Boolean& errorOccurred, Boolean& appDomainStart, Boolean useDefaults) в SqlDependencyProcessDispatcher.StartWithDefault(String connectionString, String& server, DbConnectionPoolIdentity& identity, String& user, String & база данных, String& служба, String appDomainKey, диспетчер SqlDependencyPerAppDomainDispatcher, Boolean& errorOccurred, Boolean& appDomainStart) в System.Data.SqlClient.SqlDependency.Start(String connectionString, String queue, Boolean useDefaults)

Это код, где он называется:

Обратите внимание, что ошибка возникает ДО создания запроса!

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.
        }
    }
}

person ManInMoon    schedule 23.02.2016    source источник
comment
Это не связано с отображаемой строкой подключения. Но связанный с запросом, который вы выполняете, который вы не показали.   -  person    schedule 23.02.2016
comment
@Киланни. Я НЕ верю, что это связано с запросом, ПОТОМУ ЧТО я не вносил в него НИКАКИХ изменений за несколько месяцев. Единственное, что изменилось, это разрешения на БД и таблицы.   -  person ManInMoon    schedule 23.02.2016
comment
Subquery returned more than 1 value. Эта ошибка связана с каким-то запросом. Возможно, проблема не возникала несколько месяцев, но, наконец, возникла, когда появились подходящие условия. Вам следует связаться с разработчиком приложения. Пожалуйста, покажите всю трассировку стека.   -  person    schedule 23.02.2016
comment
@Киланни. Я добавил трассировку по вашему запросу, НО обратите внимание, что ошибка возникает ДО создания запроса!   -  person ManInMoon    schedule 23.02.2016
comment
Ok. Чтобы помочь вам найти проблему, сначала восстановите свои старые учетные данные, которые работали. Во-вторых, запустите профилировщик сервера sql и обратите внимание на команду, выполняемую при выполнении строки SqlDependency.Start(connectionString, null);. В-третьих, поставьте этот запрос для нас.   -  person    schedule 23.02.2016
comment
@Киланни. В этом-то и дело. Я не знаю старых документов...   -  person ManInMoon    schedule 23.02.2016
comment
Спросите администратора БД, кто его изменил.   -  person    schedule 23.02.2016
comment
@Киланни. Он не может помочь. Вопрос действительно в том, какие учетные данные НУЖНЫ для вызова SqlDependency.Start.   -  person ManInMoon    schedule 23.02.2016


Ответы (1)


В итоге мы удалили и заново создали пользователя «billybob». Как только мы это сделали, ошибка исчезла....

person ManInMoon    schedule 23.02.2016