Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
 
SharpProg
6 / 6 / 1
Регистрация: 24.01.2017
Сообщений: 119
Завершенные тесты: 4
1

Sql запрос выполняется через SSMS, но падает при выполнении из кода C#

24.12.2018, 10:26. Просмотров 330. Ответов 29
Метки нет (Все метки)

Не могу понять причину. Выпадает SqlException, но в нём нет текста ошибки. Просто пустая строка в Message.
Версия сервера SqlServer 10.50.1600.
Сам запрос это хранимка, кода которой я не знаю и не могу посмотреть.

Кто-нибудь сталкивался с подобным?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2018, 10:26
Ответы с готовыми решениями:

Добавить таблицу к столбцу в выборке результатов при выполнении запросов через Ssms
Добрый день. Подскажите может есть настройки чтобы при запросе select * from person left join...

[SSMS] SQL Server запрос
http://i.**********/v1xwCDb.png Есть таблица с контрактами, необходимо вывести след. поля: id...

Запрос выполняется или нет при изменении кода PHP?
Я запутался. Написал запрос на удаление строки из таблицы используя PHP. Строка удалилась....

Запрос к MySQL. Через WorkBench запрос выполняется, а через клиента - нет
Добрый день! Помогите с запросом! string CommandText = "SELECT * FROM sensors WHERE...

Падает Сервер При Выполнении Агента На Сервере
Всем привет! Если в процессе выполнения агента случается какая то ошибка(опытным путем выяснено:...

29
OttoFix
39 / 31 / 9
Регистрация: 11.12.2018
Сообщений: 139
24.12.2018, 10:38 2
Ошибку обрабатываете? (вопрос для ясности)
К примеру так?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        try
        {
         ###Выполнение запроса
        }
        catch (SqlException ex)
        {
            for (int i = 0; i < ex.Errors.Count; i++)
            {
                errorMessages.Append("Index #" + i + "\n" +
                    "Message: " + ex.Errors[i].Message + "\n" +
                    "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                    "Source: " + ex.Errors[i].Source + "\n" +
                    "Procedure: " + ex.Errors[i].Procedure + "\n");
            }
            Console.WriteLine(errorMessages.ToString());
        }
0
SharpProg
6 / 6 / 1
Регистрация: 24.01.2017
Сообщений: 119
Завершенные тесты: 4
24.12.2018, 10:49  [ТС] 3
Да, внутренности ошибки я смотрел, но там ничего интересного нет.
Вот содержимое Errors:

Class = 16
LineNumber = 59
Message = " "
Number = 50000
Procedure = "myProc"
Server = "MyServer"
Source = ".Net.SqlClient.Data.Provider"
State = 105
0
Usaga
Эксперт .NET
5706 / 3939 / 702
Регистрация: 21.01.2016
Сообщений: 15,508
Завершенные тесты: 2
24.12.2018, 11:12 4
Цитата Сообщение от SharpProg Посмотреть сообщение
но там ничего интересного нет.
Информация о строке, где произошла ошибка в процедуре (LineNumber = 59) - ничего интересного?

Выполните процедуру вручную, с теми же параметрами, что из кода передаются.
0
24.12.2018, 11:12
SharpProg
6 / 6 / 1
Регистрация: 24.01.2017
Сообщений: 119
Завершенные тесты: 4
24.12.2018, 11:28  [ТС] 5
Цитата Сообщение от Usaga Посмотреть сообщение
Информация о строке, где произошла ошибка в процедуре (LineNumber = 59) - ничего интересного?
Выполните процедуру вручную, с теми же параметрами, что из кода передаются.
Об этом и вопрос, через SSMS с этими же параметрами она выполняется.
А номер строки мне ни о чём не говорит, т.к. код процедуры я всё равно не могу посмотреть.
0
Usaga
Эксперт .NET
5706 / 3939 / 702
Регистрация: 21.01.2016
Сообщений: 15,508
Завершенные тесты: 2
24.12.2018, 11:38 6
Цитата Сообщение от SharpProg Посмотреть сообщение
Об этом и вопрос, через SSMS с этими же параметрами она выполняется.
Явно нет. Посмотрите профилировщиком SSMS'а что на самом деле отправляется в процедуру.

Цитата Сообщение от SharpProg Посмотреть сообщение
А номер строки мне ни о чём не говорит, т.к. код процедуры я всё равно не могу посмотреть.
Если процедура не зашифрована, то её содержимое можно посмотреть в SSMS и даже отладить (F5). Если зашифрована, то найдите её исходник в репозитории (к которому у вас должен быть доступ), закомментирутей строку WITH ENCRYPTION и "накатите", а потом отладьте.

Добавлено через 4 минуты
Да, ещё было бы здорово увидеть как процедура из кода вызывается...
0
SharpProg
6 / 6 / 1
Регистрация: 24.01.2017
Сообщений: 119
Завершенные тесты: 4
24.12.2018, 11:42  [ТС] 7
Ни посмотреть процедуру, ни запустить профилировщик я не могу, иначе давно бы это уже сделал)
У меня права только на выполнение этой процедуры и еще пары других. Сервер не мой, я только несколько процедур использую.
Буду тогда с админом разбираться.
Просто интересно, почему через SSMS работает нормально. Может у неё какие-то настроки, которых в коде я не прописал (потому что не знаю).

Вызывается очень просто:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            using (SqlConnection connection = GetConnection())
            using (SqlCommand cmd = new SqlCommand(string.Empty, connection))
            {
                cmd.CommandTimeout = 200 * 5;
                cmd.CommandText = @"EXEC [dbo].[myProc] @date";
 
                cmd.Parameters.AddWithValue("@date", date.ToString("dd-MM-yyyy")); // да, здесь дата передаётся как строка, не спрашивайте почему, не я писал.
 
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        long account = reader.GetData<string>(0);
                        decimal money = reader.GetData<decimal>(1);
 
                        yield return new ObjPair<long, decimal>(account, money);
                    }
                }
            }
Пробовал оборачивать это в транзакцию с типом изоляции ReadUnСommitted, но это не помогло тоже
0
Usaga
Эксперт .NET
5706 / 3939 / 702
Регистрация: 21.01.2016
Сообщений: 15,508
Завершенные тесты: 2
24.12.2018, 11:46 8
SharpProg, хранимые процедуры вызываются иначе.

Цитата Сообщение от SharpProg Посмотреть сообщение
Просто интересно, почему через SSMS работает нормально.
Вызываете не так или передаёте не все параметры или не в том формате.
0
SharpProg
6 / 6 / 1
Регистрация: 24.01.2017
Сообщений: 119
Завершенные тесты: 4
24.12.2018, 11:49  [ТС] 9
Вот так я вызываю в Sql студии:

SQL
1
EXEC [dbo].[myProc] '01-11-2018'
И я уже не первый год пишу код C# и Sql, так что вряд ли бы такие глупые ошибки допустил.
0
pincet
1387 / 970 / 131
Регистрация: 23.07.2010
Сообщений: 5,274
24.12.2018, 11:52 10
Цитата Сообщение от SharpProg Посмотреть сообщение
И я уже не первый год пишу код C# и Sql, так что вряд ли бы такие глупые ошибки допустил.
CommandType где? о чем тебе уже говорили, кстате...
0
Usaga
Эксперт .NET
5706 / 3939 / 702
Регистрация: 21.01.2016
Сообщений: 15,508
Завершенные тесты: 2
24.12.2018, 11:55 11
SharpProg, замечательно, что не первый год пишете) Осталось понять, почему за эти годы вы не научились собирать максимум информации о ситуации, а бежите на форум с нулевым описанием проблемы)
0
SharpProg
6 / 6 / 1
Регистрация: 24.01.2017
Сообщений: 119
Завершенные тесты: 4
24.12.2018, 12:10  [ТС] 12
CommandType в данном случае абсолютно не обязателен, т.к. я написал код Sql целиком. CommandType позволяет писать просто более короткий вариант вызова хранимки (но на всякий случай перепроверил, ошибка так же самая).

Цитата Сообщение от Usaga Посмотреть сообщение
Осталось понять, почему за эти годы вы не научились собирать максимум информации о ситуации, а бежите на форум с нулевым описанием проблемы)
Ну описание проблемы не совсем уж нулевое) Просто в данном случае не понятно о чём именно писать (не обо всём же, включая погоду), т.к. информации особо-то и нет, вследствие чего я и прибежал на форум, вдруг кто-то сталкивался с похожим, или у меня просто глаз замылился.
0
Usaga
Эксперт .NET
5706 / 3939 / 702
Регистрация: 21.01.2016
Сообщений: 15,508
Завершенные тесты: 2
24.12.2018, 12:20 13
SharpProg, кстати, вы в коде не открываете подключение к СУБД (SqlConnection.Open()). Это происходит в GetConnection?
0
SharpProg
6 / 6 / 1
Регистрация: 24.01.2017
Сообщений: 119
Завершенные тесты: 4
24.12.2018, 12:21  [ТС] 14
Да, именно там
0
pincet
1387 / 970 / 131
Регистрация: 23.07.2010
Сообщений: 5,274
24.12.2018, 12:23 15
зарадидля прикола выполни процедуру с '20181224' захардкоженым
вот здесь

C#
1
cmd.Parameters.AddWithValue("@date", date.ToString("dd-MM-yyyy")); // да, здесь дата передаётся как строка, не спрашивайте почему, не я писал.
0
SharpProg
6 / 6 / 1
Регистрация: 24.01.2017
Сообщений: 119
Завершенные тесты: 4
24.12.2018, 12:33  [ТС] 16
Цитата Сообщение от pincet Посмотреть сообщение
зарадидля прикола выполни процедуру с '20181224' захардкоженым
вот здесь
Всё равно упала. Через SSMS выполнилась нормально.
Есть идея отладить внутренности SqlDataReader. У меня подозрение, что запрос выполняется, но при попытке создать объект ридера падает (возможно из-за ограниченности моих прав).
0
Usaga
Эксперт .NET
5706 / 3939 / 702
Регистрация: 21.01.2016
Сообщений: 15,508
Завершенные тесты: 2
24.12.2018, 12:46 17
Цитата Сообщение от SharpProg Посмотреть сообщение
Есть идея отладить внутренности SqlDataReader.
Ридер уже отлажен до вас.

И прав вам хватает, раз через SSMS выполняется запрос.
0
SharpProg
6 / 6 / 1
Регистрация: 24.01.2017
Сообщений: 119
Завершенные тесты: 4
24.12.2018, 13:01  [ТС] 18
Цитата Сообщение от Usaga Посмотреть сообщение
Ридер уже отлажен до вас.
Иногда отладка готовых библиотек помогает найти ошибку у себя, ну или лучше её понять)
0
OttoFix
39 / 31 / 9
Регистрация: 11.12.2018
Сообщений: 139
24.12.2018, 13:14 19
Цитата Сообщение от SharpProg Посмотреть сообщение
cmd.CommandTimeout = 200 * 5;
По таймауту не выбрасывает?
0
SharpProg
6 / 6 / 1
Регистрация: 24.01.2017
Сообщений: 119
Завершенные тесты: 4
24.12.2018, 13:15  [ТС] 20
Нет. Тогда бы исключение было другое. И таймаут я ставил уже 100000000, не в нём дело.
0
24.12.2018, 13:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2018, 13:15

Запрос из кода отличается в поведении при запросе из SQL
Доброго времени суток! Есть запрос, который показывает кол-во работников, не получивших зарплату...

Не выполняется SQL-запрос
Подскажите, не выполняется sql зарос по кнопке. procedure TMainForm.Button1Click(Sender:...

Не выполняется SQL запрос
Есть обработчик события нажатия кнопки, в котором выполняется следующий код: protected void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru