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

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

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

Author24 — интернет-сервис помощи студентам
Прошу прощения за неоднозначное название, думал над ним минут 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2018, 12:14
Ответы с готовыми решениями:

Из одного массива сформировать два: элементы встречающиеся один и более одного раза в исходном массиве
Из исходного массива сформировать два новых: первый из элементов, которые встречаются по 1 разу и...

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

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

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

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

Я честно не нуб в SQL-запросах, но тут нужна работа с C#.
А вот тут моих знаний катастрофически не хватает. Ибо шарп выдаёт мне результат только одного селекта, но их там десяток.
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
08.05.2018, 18:01 4
Prorok_75, ок, тогда иначе. При подвызовах у Вас технически образуются разные таблицы. Чтобы не мудрить много кода, и не строить nextResult() можете воспользоваться адаптером вместо ридера, и заполнять DataSet, а из него, зная сколько там таблиц - конкатенировать.
Но это бред.
Лучше, если знаете сиквел, то конкатенируйте строки внутри процедуры.
Не царское (читай - клиентское) это дело - строки конкатенировать.
0
Администратор
Эксперт .NET
17553 / 13776 / 5298
Регистрация: 17.03.2014
Сообщений: 28,253
Записей в блоге: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2018, 19:46
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru