Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# NextResult(); / 9 сообщений из 9, страница 1 из 1
26.02.2014, 15:00
    #38573011
vah
vah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# NextResult();
Скажите пожалуйста,
пытаюсь прочитать данные из результатов хранимой процедуры.

Эта процедура на сервере состоит из курсора с различными результирующими наборами.

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

авторcommand_r.NextResult(); - возвращает false.

Как правильно читать данные из курсора?

Заранее благодарен.
...
Рейтинг: 0 / 0
26.02.2014, 15:02
    #38573016
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# NextResult();
vah, код "курсора с различными результирующими наборами" покажите.
...
Рейтинг: 0 / 0
26.02.2014, 15:09
    #38573033
vah
vah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# NextResult();
skyANA,

авторALTER PROCEDURE [dbo].[sp_print_excel]
(
@id_zayavka int
)
AS
BEGIN


DECLARE @id_doc INT,@kol INT,@kolDog INT

SELECT @kolDog=kol_exempl_dog from dbo.q_main_zayavka
WHERE id=@id_zayavka

SET @kolDog=ISNULL(@kolDog,0)

SET @kol=1


WHILE @kolDog>=@kol
BEGIN

DECLARE Cur CURSOR FOR
SELECT id from dbo.q_main_document
WHERE id_zayavka=@id_zayavka

OPEN Cur

FETCH NEXT FROM Cur
INTO @id_doc
WHILE @@FETCH_STATUS = 0
BEGIN


SELECT 1 ord, 'БК-'+ltrim(STR(num_bk)) val from dbo.q_main_zayavka zaya
WHERE id=@id_zayavka
UNION
SELECT 2 ord, zaya.user_bk_str from dbo.q_main_zayavka zaya
WHERE id=@id_zayavka
UNION
SELECT 3 ord, 'Инв. № БЛ-'+ltrim(STR(doc.num_inv)) from dbo.q_main_document doc
WHERE id=@id_doc
UNION
SELECT 4 ord, doc.pereplet_original from dbo.q_main_document doc
WHERE id=@id_doc
UNION
SELECT 5 ord, 'Экз. № '+ ltrim(STR(@kol)) from dbo.q_main_document doc
WHERE id=@id_doc
UNION
SELECT 6 ord, 'Том '+ ltrim(STR(doc.tom)) from dbo.q_main_document doc
WHERE id=@id_doc
UNION
SELECT 7 ord, 'Инв. № БЛ-'+ltrim(STR(doc.num_inv)) from dbo.q_main_document doc
WHERE doc.id_zayavka=@id_zayavka

FETCH NEXT FROM Cur INTO @id_doc
END

CLOSE Cur
DEALLOCATE Cur


SET @kol=@kol+1

END

END
...
Рейтинг: 0 / 0
26.02.2014, 15:27
    #38573063
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# NextResult();
Ярко выраженная "императивность головного мозга", как выражается один из участников раздела по MSSQL. Зачем здесь вообще ХП?
Всё решается одним запросом, в крайнем случае - инлайновой функцией.
А NextResult возвращает только один набор, потому что ХП отдает не один резалтсет, а много (столько, сколько итераций в курсорном цикле). Ну, а SqlDataReader не работает с MARS.
...
Рейтинг: 0 / 0
26.02.2014, 15:44
    #38573088
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# NextResult();
vah, странно, но такой код у меня прекрасно работает:

Код: 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.
26.
27.
28.
var connection = new SqlConnection(connectionString);
var rows = 0;

connection.Open();

using (var command = new SqlCommand("dbo.sp_print_excel", connection))
{
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.AddWithValue("id_zayavka", 1);

    using (var reader = command.ExecuteReader())
    {
        do
        {
            while (reader.Read())
            {
                Console.WriteLine("Order: {0}", reader["ord"]);
                Console.WriteLine("Value: {0}", reader["val"]);

                rows++;
            }
        } while (reader.NextResult());
    }
}

Console.WriteLine();
Console.WriteLine("{0} rows", rows);
Console.ReadKey();


P.S.: а процедурка Ваша - УГ :)
...
Рейтинг: 0 / 0
26.02.2014, 16:05
    #38573125
vah
vah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# NextResult();
skyANA,
спасибо
...
Рейтинг: 0 / 0
26.02.2014, 16:12
    #38573143
vah
vah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# NextResult();
vah,



skyANA,

а у вас случайно нет красивого механизма выгрузки DataTable в Excel?
...
Рейтинг: 0 / 0
26.02.2014, 16:34
    #38573178
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# NextResult();
vah, что такое красивый механизм и о какой версии Excel речь? :)
...
Рейтинг: 0 / 0
26.02.2014, 16:37
    #38573186
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# NextResult();
Красивый механизм выгрузки - это, например, ReportViewer?
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# NextResult(); / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]