T-SQL Query всегда возвращает результаты в SSMS, но иногда не возвращает результаты при выполнении через .NET через ADO.NET - PullRequest
4 голосов
/ 12 августа 2010

Я более чем немного запутался с проблемой, с которой столкнулся 3 раза за последние 2-3 месяца. Название этого вопроса описывает проблему, но более подробно:

У меня есть SP, который всегда возвращает результаты без проблем при выполнении через SQL Server Mgmt. Studio, однако очень редко (но достаточно, чтобы вызвать сильные головные боли) - он просто НЕ вернет ничего, когда он вызывается через консольное приложение .NET.

Я проверил известные мне журналы ошибок / приложений SQL Server и Windows Server (журналы SQL Server и все, что в средстве просмотра событий на Windows Server, на котором находится SQL Server), и ничего не показалось ...

Что, черт возьми, может быть причиной этого? Приложение, SP и все работают просто отлично. Просто при вызове из приложения .NET этот SP не может вернуть данные. Я знаю, что очевидным решением будет отладка из VS и просмотр деталей соединения (я также не получаю никаких исключений, когда это происходит) в отладчике от начала до конца выполнения SP, но это невозможно, так как проблема возникает синего цвета и не воспроизводится. Я хочу, чтобы это не повторилось.

Возможно ли это самопроизвольно прерванное соединение SQL или как? Любые мысли, комментарии и предложения приветствуются.

Ответы [ 2 ]

3 голосов
/ 12 августа 2010

Распространенной проблемой здесь являются опции SET, которые находятся в игре. Это не очевидно, так как вы редко устанавливаете их явно из SSMS или ADO.NET, но они могут отличаться . В частности, это может повлиять на что-либо, включая постоянные индексированные столбцы, sql xml и ряд других вариантов поведения; нулевое равенство, concat-null, max-row, только схема (без данных), интерпретация кавычек, арифметическое прерывание и т. д.

Итак: найдите, какие опции SET находятся в игре.

Это может быть еще большей проблемой, если какой-то некорректно работающий код (либо в БД, либо в вызывающем клиенте) устанавливает опцию для какой-то цели и не устанавливает ее обратно. Особенно, если этот код запускается только изредка.

0 голосов
/ 12 августа 2010

вещь вещь динамическая вообще?Возможно, вы создаете оператор SQL, который в некоторых случаях не работает.

Профилирование - единственное, что нужно сделать, чтобы поймать его в действии.Посмотрите, какие значения он отправляет, когда он ведет себя не так, как ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...