powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Возврат из хранимой процедуры нескольких значений
7 сообщений из 7, страница 1 из 1
Возврат из хранимой процедуры нескольких значений
    #38620978
VKabanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста разобраться с тем, как из хранимой процедуры получить в С# несколько значений по одному столбцу.
Есть следующая процедура:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE PROCEDURE get_word_id_from_vocabulary (@SearchWord NVARCHAR(50), @CaseSensitive BIT, @WordID int output)
AS

BEGIN
   
IF @CaseSensitive=1

SELECT @WordID=WordSheet.WordID
FROM
  dbo.WordSheet
WHERE
  Word = @SearchWord COLLATE SQL_Latin1_General_CP1_CS_AS
ELSE 
  SELECT @WordID=WordSheet.WordID
  FROM
    dbo.WordSheet
  WHERE
    Word = @SearchWord COLLATE SQL_Latin1_General_CP1_CI_AS
      
  RETURN
END



Есть обрабатывающий код на С#, но он получает только одно значение (последнее/первое?), а надо получать все...
Код: 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.
29.
30.
SqlCommand cmd = new SqlCommand("get_word_id_from_vocabulary", cn);
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;

                    //Передаю в качестве параметра строку - искомое слово
                    SqlParameter param = new SqlParameter();
                    param.ParameterName = "@SearchWord";
                    param.SqlDbType = System.Data.SqlDbType.NVarChar;
                    param.Value = Word;
                    param.Direction = System.Data.ParameterDirection.Input;
                    cmd.Parameters.Add(param);

                    //Передаю в качестве параметра bit - флаг чуствительность к регистру
                    SqlParameter param2 = new SqlParameter();
                    param2.ParameterName = "@CaseSensitive";
                    param2.SqlDbType = System.Data.SqlDbType.Bit;
                    param2.Value = (bool) CaseSensitive;
                    param2.Direction = System.Data.ParameterDirection.Input;
                    cmd.Parameters.Add(param2);
                    
                    //Выходной параметр int - WordID слова  Word в таблице WordSheet
                    SqlParameter param3 = new SqlParameter();
                    param3.ParameterName = "@WordID";
                    param3.SqlDbType = System.Data.SqlDbType.Int;
                    param3.Value = 0;
                    param3.Direction = System.Data.ParameterDirection.Output;
                    cmd.Parameters.Add(param3);
                    
                    cmd.ExecuteNonQuery();

                    exitcode = (int)cmd.Parameters["@WordID"].Value;
...
Рейтинг: 0 / 0
Возврат из хранимой процедуры нескольких значений
    #38621009
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create proc MyProc as

declare 
    @Value1 int, 
    @Value2 int, 
    @Value3 int, 
    @Value4 int

------------

select 
    @Value1 Value1, 
    @Value2 Value2, 
    @Value3 Value3, 
    @Value4 Value4
go
...
Рейтинг: 0 / 0
Возврат из хранимой процедуры нескольких значений
    #38621575
VKabanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К,

Нет, надо возвращать не в ширину (несколько столбцов) а в глубину, несколько значений из одного столбца (WordID может иметь несколько значений, если смотреть на Word игнорируя регистр)
...
Рейтинг: 0 / 0
Возврат из хранимой процедуры нескольких значений
    #38621600
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так верните табличку с одной колонкой, в чём трудности то?


Код: c#
1.
2.
3.
4.
5.
6.
select @1
union all
select @2
union all
select @3
...
...
Рейтинг: 0 / 0
Возврат из хранимой процедуры нескольких значений
    #38621825
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VKabanov,

.. так если вам надо получать значения, а не просто выполнить какие-то действия на сервере, почему не использовать SQLDataReader вместо ExecuteNonQuery ?

http://msdn.microsoft.com/en-us/library/d7125bke.aspx
...
Рейтинг: 0 / 0
Возврат из хранимой процедуры нескольких значений
    #38623524
VKabanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
carrotik,

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

Из программы только подключение (по параметрам из конфигурационного файла) и запуск хранимых процедур с параметрами с получением затем их результатов. Т.е. весь SQL хардкодинг надо вывести из программы.
...
Рейтинг: 0 / 0
Возврат из хранимой процедуры нескольких значений
    #38624240
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VKabanov,
.. ну так там по ссылке прямой пример с хранимой процедурой

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SqlConnection sqlConnection1 = new SqlConnection("Your Connection String");
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;

cmd.CommandText = "StoredProcedureName";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = sqlConnection1;

sqlConnection1.Open();

reader = cmd.ExecuteReader();
// Data is accessible through the DataReader object here.

sqlConnection1.Close();



...и никакого хардкодинга ... Просто в DataReader-e вы получите набор значений, и делайте потом с ним, что хотите ...
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Возврат из хранимой процедуры нескольких значений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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