ExecuteReader не возвращает результатов, когда проверенный запрос

Рассмотрим следующий код:

        StringBuilder textResults = new StringBuilder();
        using(SqlConnection connection = new SqlConnection(GetEntityConnectionString()))
        {
            connection.Open();
            m.Connection = connection;
            SqlDataReader results = m.ExecuteReader();
            while (results.Read())
            {
                textResults.Append(String.Format("{0}", results[0]));
            }
        }

Я использовал Activity Monitor в Sql Server Mgmt Studio в базе данных, чтобы проверить точный запрос, который был отправлен. Затем я скопировал этот текст запроса в окно редактора запросов в SSMS, и запрос вернул ожидаемые результаты. Тем не менее, Результаты SqlDataReader всегда пусты, указывая «перечисление не получило результатов».

Мое подозрение в том, что каким-то образом результаты не возвращаются правильно, что заставляет меня думать, что что-то не так с кодом выше, а не с самим запросом.

Есть ли что-нибудь, что могло бы вызвать это в коде выше? Или что-то, что я забыл?

<�Сильный> EDIT:

Вот запрос, указанный объектом SQLCommand:

SELECT DISTINCT StandardId,Number 
FROM vStandardsAndRequirements 
WHERE StandardId IN ('@param1','@param2','@param3') 
ORDER BY StandardId

Вот запрос, который появляется в Activity Monitor:

SELECT DISTINCT StandardId,Number 
FROM vStandardsAndRequirements 
WHERE StandardId IN ('ABC-001-0','ABC-001-0.1','ABC-001-0') 
ORDER BY StandardId

Запрос работает против одного представления.

Когда я запускал второй запрос к базе данных, он возвращал 3 строки.

SqlDataReader указывает 0 строк.

3
возможно, вы должны показать нам запрос и то, что выглядят таблицы, довольно сложно сказать, что не получается без запроса/DDL. Код выше в порядке.
добавлено автор Matten, источник
Спасибо, сделаю.
добавлено автор morganpdx, источник

4 ответы

Вы уверены, что это

WHERE StandardId IN ('@param1','@param2','@param3') 

вместо этого?

WHERE StandardId IN (@param1,@param2,@param3) 

Параметры не должны указываться, а не в объекте SQLCommand.

2
добавлено
@morgan Почему вы думаете, что вы должны получать 3 строки? Если StandardId уникален, я бы подумал, что 2 строки max, заданные WHERE StandardId IN ('ABC-001-0', 'ABC-001-0.1', 'ABC-001-0') param1 и param3 одинаковы.
добавлено автор RichardTheKiwi, источник
@morgan - textResults также добавляет все результаты вместе без каких-либо запятых, труб или другого разделителя. Все, что вы получаете, это одна строка, поэтому трудно понять, есть ли несколько результатов.
добавлено автор RichardTheKiwi, источник
Я попробовал это и получил 1 строку назад. Однако I должен получать три строки. Поэтому я думаю, что это может быть частью проблемы, но не для всех ...
добавлено автор morganpdx, источник
oops - это опечатка на последнем параметре, должна быть ABC-001-0a. Что касается textResults, я фактически проверял вывод SqlDataReader для # ряда, поэтому я этого не заметил. Благодаря!
добавлено автор morganpdx, источник

попробуйте использовать Sqldata-адаптер вместо sqldatreader.

StringBuilder textResults = new StringBuilder();

        using (var conn = new SqlConnection(GetEntityConnectionString())))
        {
            using (
                var cmd = new SqlCommand(
            "SELECT DISTINCT StandardId,Number" +
                "FROM vStandardsAndRequirements " +
            "WHERE StandardId IN (@param1,@param2,@param3)" +
            "ORDER BY StandardIdl"

       , conn))
            {

                var dSet = new DataSet();
                var dt = new Datatable();

                var da = new SqlDataAdapter(cmd);

                cmd.Parameters.Add("@param1", SqlDbType.VarChar, 50).Value = "ABC-001-0";
        cmd.Parameters.Add("@param2", SqlDbType.VarChar, 50).Value = "ABC-001-0.1";
                cmd.Parameters.Add("@param3", SqlDbType.VarChar, 50).Value = "ABC-001-0";
                try
                {

                    da.Fill(dSet);

        dt = dSet.Tables[0];

        foreach(Datarow a in dt.Rows)
        {

            textResults.Append(a["StandardId"].tostring()).AppendLine();


        }

        Messabox.Show(textResults.tostring);

                }
                catch (SqlException)
                {
                    throw;
                }

       finally
                {
                    if (conn.State == ConnectionState.Open) conn.Close();
                }

            }
        }

С уважением.

1
добавлено

Проверьте строку подключения и убедитесь, что вы не подключаетесь в качестве экземпляра пользователя.

http://msdn.microsoft.com/en-us/library/ms254504.aspx

0
добавлено
Проверено - в строке подключения нет «Пользовательского экземпляра», и я не использую Sql Server Express - это противоречит экземпляру полного SQL-сервера.
добавлено автор morganpdx, источник

Очень приятное поведение, которое я наблюдал

Я искал ошибки в коде:

 ... dr = command.ExecuteReader()  ... If dr.Read Then ...

и обнаружил, что «dr.Read» отлично работает, но ... когда я наводил курсор на «dr», чтобы искать данные, возвращаемые значения исчезли!

0
добавлено
DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)