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

Возврат из хранимой процедуры нескольких значений

22.04.2014, 01:14. Просмотров 1008. Ответов 1
Метки нет (Все метки)

Помогите пожалуйста разобраться с тем, как из хранимой процедуры получить в С# несколько значений по одному столбцу.
Есть следующая процедура:
T-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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2014, 01:14
Ответы с готовыми решениями:

Обновление отчета при значениях учете значений хранимой процедуры
Есть БД, была создана хранимая процедура для отчета : USE GO /****** Object: ...

Вызов хранимой процедуры
Здравствуйте, помогите пожалуйста. Мне нужно сделать, чтобы на форму в ЛистБокс выводилась...

Создание хранимой процедуры в C#
Есть БД в SQL. Интерфейс создается на C#. Как создать такую хранимую процедуру: CREATE PROC...

Вызов хранимой процедуры
Как вызвать хранимую процедуру в БД Access через Viasual Studio 2015 Community. Хранимые процедуры:...

Отчет из хранимой процедуры
Подскажите, как в Visual Studio 2010 создать отчет на основе хранимой процедуры? код процедуры ...

1
OwenGlendower
Супер-модератор
Эксперт .NET
11341 / 9555 / 4029
Регистрация: 17.03.2014
Сообщений: 19,112
Записей в блоге: 1
Завершенные тесты: 2
22.04.2014, 01:40 2
VKabanov, параметр @WordID имеет тип int, а значит может хранить только одно значение. Если тебе нужно возвращать несколько значений, то возвращай набор данных:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE PROCEDURE get_word_id_from_vocabulary (@SearchWord NVARCHAR(50), @CaseSensitive BIT)
AS
BEGIN
  
IF @CaseSensitive=1
    SELECT
        WordSheet.WordID
    FROM
        dbo.WordSheet
    WHERE
        Word = @SearchWord COLLATE SQL_Latin1_General_CP1_CS_AS
ELSE
    SELECT
        WordSheet.WordID
    FROM
        dbo.WordSheet
    WHERE
        Word = @SearchWord COLLATE SQL_Latin1_General_CP1_CI_AS
      
END
Затем читай их с помощью SqlDataReader'a
1
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2014, 01:40

Вызов хранимой процедуры
Привет! У меня есть база данных и запрос, написанный на SQL в сишарпе. Таблица из базы данных...

Создание хранимой процедуры
Здравствуйте, помогите пожалуйста с программой. Есть БД техникума и нужно создать приложение...

Результат хранимой процедуры
Есть хранимая процедура на SQL Server, которая принимает два параметра - логин и пароль. и если...


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

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

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