Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как затолкнуть данные из ХП в массив или рекордсет? / 9 сообщений из 9, страница 1 из 1
15.09.2005, 15:15
    #33271503
Alex112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затолкнуть данные из ХП в массив или рекордсет?
На сервере создал такую ХП:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE PROCEDURE [dbo].[AN_R01_T01] (@TbName as varchar( 255 ), @PStep as smallint) AS

--Table 1. External trade by selected goods  from *** till ***  by month/quarter  interval; ‘000 Dollars USA

declare @sql as varchar( 8000 )
declare @fld as varchar( 32 )

if (@PStep= 1 ) set @fld='ngtd_month'
if (@PStep= 3 ) set @fld='ngtd_quarter'

set @sql = 'SELECT     ngtd_year, '+@fld+', dir_id, SUM(Cost_Cst_UE) AS Cost_Cst_UE, SUM(Cost_Product_UE) AS Cost_Product_UE, SUM(Cost_Stat_UE) AS Cost_Stat_UE'+
' FROM         [dbo].['+@TbName+']'+
' GROUP BY ngtd_year, '+@fld+', dir_id'+
' ORDER BY ngtd_year, '+@fld+', dir_id'

exec(@sql)
GO

В коде вызываю ее так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    Private CnnTmp As New SqlConnection
    Private CnnStrTmp As String = "Data Source=SERVER;Initial Catalog=online_temp;User Id=db;Password=coolpass;"
    Private Cmd As SqlCommand
        
        CnnTmp.ConnectionString = CnnStrTmp
        CnnTmp.Open()
        Cmd = New SqlCommand("dbo.AN_R01_T01", CnnTmp)
        Cmd.CommandType = CommandType.StoredProcedure
        Cmd.CommandTimeout =  0 
        Call AddParameter(Cmd, "@TbName", SqlDbType.VarChar,  255 , ParameterDirection.Input, TbName)
        Call AddParameter(Cmd, "@PStep", SqlDbType.SmallInt,  0 , ParameterDirection.Input, PStep)

        Cmd.ExecuteReader()

Подскажите, как нужно доработать код ХП и код ее вызова, чтобы затолкнуть строки полученные в ХП, в массив (предпочтительнее) или в рекордсет за раз, не используя цикл?

P.S. Процедура Call AddParameter(***) именно добавляет параметры к Cmd, и вынесена в отдельное место чтобы не загромождать основной код ...
...
Рейтинг: 0 / 0
15.09.2005, 15:28
    #33271548
Абориген
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затолкнуть данные из ХП в массив или рекордсет?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatadatasetclasstopic.asp
...
Рейтинг: 0 / 0
19.09.2005, 10:18
    #33275981
Alex112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затолкнуть данные из ХП в массив или рекордсет?
А кто-нибудь из гуру может привести реальный пример кода, как это делается? По ссылке выше, что-то никак не прорубаю...

Помогите, пожалуйста, новичку.
...
Рейтинг: 0 / 0
19.09.2005, 15:08
    #33276858
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затолкнуть данные из ХП в массив или рекордсет?
Вариант из области извращений для ленивых (в смысле тех, кто не хочет в цикле выбирать значения):
оформи выборку из таблицы в виде FOR XML (о том как это сделать см BOL и MSDN), получи всё это в виде ОДНОЙ строки, а потом сделай DataSet.ReadXml.

Вот такие извращения :-)
________________________________________________________
Всегда есть куда развиваться, нужно просто этого хотеть.
...
Рейтинг: 0 / 0
19.09.2005, 19:01
    #33277482
Hratchia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затолкнуть данные из ХП в массив или рекордсет?
хп не смотрел, а вот насчет кода - можно в таблицу(датасет) все слить.
(сорри если есть синтаксические ошибки -пишу на ура:)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    Private CnnTmp As New SqlConnection
    Private CnnStrTmp As String = "Data Source=SERVER;Initial Catalog=online_temp;User Id=db;Password=coolpass;"
    Private Cmd As SqlCommand
        
        CnnTmp.ConnectionString = CnnStrTmp
        CnnTmp.Open()
        Cmd = New SqlCommand("dbo.AN_R01_T01", CnnTmp)
        Cmd.CommandType = CommandType.StoredProcedure
        Cmd.CommandTimeout =  0 
        Call AddParameter(Cmd, "@TbName", SqlDbType.VarChar,  255 , ParameterDirection.Input, TbName)
        Call AddParameter(Cmd, "@PStep", SqlDbType.SmallInt,  0 , ParameterDirection.Input, PStep)

dim ds as new Dataset

dim da as new SqlDataAdapter
da.selectCommand=cmd

da.fill(ds)


P.S. не знал, что еще кто-то пользуется командами типа Call
...
Рейтинг: 0 / 0
20.09.2005, 12:18
    #33278407
Alex112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затолкнуть данные из ХП в массив или рекордсет?
Hratchia

Спасибо! Сам именно к этому и пришел вчера. А по-поводу использования Call, просто так, сразу вижу, что это моя самострочная процедура :) ...
...
Рейтинг: 0 / 0
21.09.2005, 14:31
    #33281317
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затолкнуть данные из ХП в массив или рекордсет?
Hratchia

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
...
dim ds as new Dataset

dim da as new SqlDataAdapter
da.selectCommand=cmd

da.fill(ds)
...

Да, и получаем накладные расходы на создание DataAdapter-а.
А цикл для выборки данных всё равно есть, но ты его не видишь, всё делает DataAdapter в методе Fill.
Так что если хочешь поиметь прямо сразу всё за раз, посмотри в сторону FOR XML.
________________________________________________________
Всегда есть куда развиваться, нужно просто этого хотеть.
...
Рейтинг: 0 / 0
21.09.2005, 21:23
    #33282486
Абориген
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затолкнуть данные из ХП в массив или рекордсет?
Alex KuznetsovДа, и получаем накладные расходы на создание DataAdapter-а.
А цикл для выборки данных всё равно есть, но ты его не видишь, всё делает DataAdapter в методе Fill.
Так что если хочешь поиметь прямо сразу всё за раз, посмотри в сторону FOR XML.И что там за накладные расходы такие страшные? По сравнению с вызовом ХП?

Хотя я бы честно говоря в этом случае прошёлся ридером и заполнил бы массив, как это и было в первоначальном варианте у автора топика.
...
Рейтинг: 0 / 0
22.09.2005, 12:29
    #33283326
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как затолкнуть данные из ХП в массив или рекордсет?
Абориген
И что там за накладные расходы такие страшные? По сравнению с вызовом ХП?

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

А никто и не говорил про страшные накладные расходы, а говорил я про их существование. К тому-же судя по структуре выходных данных из ХП - она заранее известна, поэтому я (как можно заметить выше) тоже предлагал делать выборку DataReader-ом Alex Kuznetsovв смысле тех, кто не хочет в цикле выбирать значения.
Но дак ведь автор настаивает на получении всей выборки за РАЗ, НЕ ИСПОЛЬЗУЯ ЦИКЛ .
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как затолкнуть данные из ХП в массив или рекордсет? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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