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

Более одного результата за один подход к БД

08.05.2018, 12:14. Просмотров 721. Ответов 4
Метки нет (Все метки)

Прошу прощения за неоднозначное название, думал над ним минут 10, безрезультатно.

Вопрос вот в чём: при нажатии на кнопку, запускается запрос к БД (процедура с циклом).
Каждый успешный проход цикла запускает ещё несколько процедур, которые возвращают по строке(бывает и больше).
В итоге процедура возвращает несколько таблиц, но в C# вижу только одну.

Добустим так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public string ReturnFromDB(string query)
        {
            SqlConnection myConnection = new SqlConnection("Persist Security Info=False;User ID=sa;Password=sa;Initial Catalog=LEAD;Server=server";);
            myConnection.Open();
            SqlCommand command = new SqlCommand(query, myConnection);
            command.CommandTimeout = 999999999;
            SqlDataReader reader = command.ExecuteReader();
            string returnstring = "";
            while (reader.Read())
            {
                if (returnstring == "")
                    returnstring = reader[0].ToString();
                else
                    returnstring += "\n" + reader[0].ToString();
            }
            reader.Close();
            myConnection.Close();
            return returnstring;
        }
 
 private void button1_Click(object sender, EventArgs e)
        {
            ReturnFromDB("Select 1 UNION Select 2 Select 3");
        }
Мне нужна в результате строка "1\n2\n3", но получаю лишь "1\n2".
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2018, 12:14
Ответы с готовыми решениями:

Ошибка SqlDataAdapter.Update при использовании метода на добавление более одного раза
Ниже описан метод добавления работника, если добавляю одного, то все норм, но...

Выборка из таблицы и отображение более одного результата
Прошу понять и простить, но вопрос в следующем: запрашивается из таблицы по id...

Как за один раз создать более одного запроса SQL
Как за один раз передать более двух запросов SQL, где то натыкался на подобную...

Заменить каждую последовательность, содержащую более одного пробела, на один пробел
В заданной строке заменить каждую последовательность, содержащую более одного...

Выяснить, верно ли, что хотя бы один символ входит в последовательность более одного раза
Даны символы s1,..., s50. Выяснить, верно ли, что хотя бы один символ входит в...

4
hoolygan
352 / 279 / 76
Регистрация: 21.06.2016
Сообщений: 1,099
08.05.2018, 13:33 2
Учим объединение результатов очень внимательно, и смотрим, что пропущено перед 3-им по списку оператором select
0
Prorok_75
4 / 4 / 3
Регистрация: 03.02.2017
Сообщений: 27
08.05.2018, 14:11  [ТС] 3
Цитата Сообщение от hoolygan Посмотреть сообщение
смотрим, что пропущено перед 3-им по списку оператором select
Пожалуйста, прочти что написано сверху.
Эта строка как пример. На деле же я пускаю в базу процедуру, в которой цикл, цикл запускает другие процедуры, каждая процедура возвращает селект( бывает даже два селекта) объединить их оператором "UNION" невозможно.

Я честно не нуб в SQL-запросах, но тут нужна работа с C#.
А вот тут моих знаний катастрофически не хватает. Ибо шарп выдаёт мне результат только одного селекта, но их там десяток.
0
hoolygan
352 / 279 / 76
Регистрация: 21.06.2016
Сообщений: 1,099
08.05.2018, 18:01 4
Prorok_75, ок, тогда иначе. При подвызовах у Вас технически образуются разные таблицы. Чтобы не мудрить много кода, и не строить nextResult() можете воспользоваться адаптером вместо ридера, и заполнять DataSet, а из него, зная сколько там таблиц - конкатенировать.
Но это бред.
Лучше, если знаете сиквел, то конкатенируйте строки внутри процедуры.
Не царское (читай - клиентское) это дело - строки конкатенировать.
0
OwenGlendower
Супер-модератор
Эксперт .NET
9669 / 8418 / 3606
Регистрация: 17.03.2014
Сообщений: 16,850
Записей в блоге: 1
08.05.2018, 19:46 5
Лучший ответ Сообщение было отмечено Usaga как решение

Решение

Prorok_75, для чтения нескольких результатов нужно использовать метод NextResult. Ну и раз идет создание строки из неизвестного количества компонентов, то не помешает StringBuilder
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public string ReturnFromDB(string query)
{
    using (SqlConnection myConnection = new SqlConnection("Persist Security Info=False;User ID=sa;Password=sa;Initial Catalog=LEAD;Server=server";))
    {
        myConnection.Open();
        SqlCommand command = new SqlCommand(query, myConnection);
        command.CommandTimeout = 999999999;
        using (SqlDataReader reader = command.ExecuteReader())
        {
            StringBuilder sb = new StringBuilder();
            if (reader.HasRows)
            {
                do
                {
                    while (reader.Read())
                    {
                        sb.Append(reader[0].ToString()).Append("\n");
                    }
                } while (reader.NextResult());
                sb.Length--;
            }
            return sb.ToString();
        }
    }
}
1
08.05.2018, 19:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2018, 19:46

Выяснить, верно ли, что хотя бы один символ входит в массив более одного раза
Даны символы s1,...,s50 . Выяснить, верно ли, что хотя бы один символ входит в...

Найти вероятность того, что среди шаров все белые; один белый; не более одного белого
Если возможно и не затруднит прошу пожалуйста помощи в решении этих заданий на...

Угадать число от 1 до 100 за 7 попыток: есть ли более изящный подход, чем if/else?
Задача заключается в том что нужно написать программу который угадывает число...


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

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

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