powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF + MSSQL получить значение выходного параметра.
15 сообщений из 15, страница 1 из 1
WPF + MSSQL получить значение выходного параметра.
    #39916155
Добрый вечер! Имеется база данных на MSSQL, в которой создана хранимая процедура. Чтобы не занимать лишнее место, прикладывать её всю не будут. Она имеет выходной параметр. Я уже напряму в процедуре указал значние

Код: sql
1.
2.
3.
4.
@id int OUTPUT,

SET @id = 3
SELECT @id



При выполнении процедуры в SQL Management Studio, результат возвращается в виде значения - 3.

Код на 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
private void BLogin_Click(object sender, RoutedEventArgs e)
        {

            SqlConnectionStringBuilder connect = new SqlConnectionStringBuilder();

            connect.ConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=SB;" +
          "Integrated Security=SSPI;Pooling=False";


            using (SqlConnection cn = new SqlConnection())
            {
                cn.ConnectionString = connect.ConnectionString;
                try
                {
                    cn.Open();

                    SqlCommand myCommand = new SqlCommand("US_LOGIN", cn);


                    myCommand.CommandType = CommandType.StoredProcedure;
                    ... Тут аналогичный код с передачей других параметров только с пераметром Input.
                    SqlParameter param1 = new SqlParameter();
                    param1.Direction = ParameterDirection.Output;
                    myCommand.Parameters.Add("@id", SqlDbType.Int).Value = 8;

                     myCommand.ExecuteReader();
                    // Возврат выходного параметра.
                    label1.Content = Convert.ToString(myCommand.Parameters["@id"].Value);
                }

                catch (SqlException ex)
                {
                    MessageBox.Show("Ошибка: " + ex);
                }
                finally
                {
                    cn.Close();
                   
                }
            }
        }



Пробовал вызывать и методом myCommand.ExecuteNonQuery(). В результате возвращается значение = 8. Хотя в процедуре явно задано = 3. Что делаю не так? Подскажите пожалуйста.
...
Рейтинг: 0 / 0
WPF + MSSQL получить значение выходного параметра.
    #39916159
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Евгений Стронг, сегодня, 01:16 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1321369&msg=22062753][22062753]
>… Пробовал вызывать и методом …
<
Использую reader, как то так (извините, использую листинг работающей схемы, разберетесь, лишнее выбросите):
public static async Task Entity_SPx(string spname, dlg_sp sp, dlg_RowToEntity RowToEntity) {
wsp_Ошибка = null;
try {
using (SqlConnection connection = new SqlConnection(str_Соединение)) {
await connection.OpenAsync();
SqlCommand command = new SqlCommand("", connection);
command.Parameters.Clear();
command.Parameters.AddRange(asp);
command.CommandText = spname;
command.CommandType = CommandType.StoredProcedure;
//-- Формируем коллекцию из выборки
using (reader = await command.ExecuteReaderAsync()) {
while ( await reader.ReadAsync()) ...
}
}
}
catch (Exception ex) { wsp_Ошибка = ex.Message; }
}
...
Рейтинг: 0 / 0
WPF + MSSQL получить значение выходного параметра.
    #39916197
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронг
Что делаю не так?

Евгений Стронг
Код: c#
1.
2.
3.
                    SqlParameter param1 = new SqlParameter();
                    param1.Direction = ParameterDirection.Output;
                    myCommand.Parameters.Add("@id", SqlDbType.Int).Value = 8;

вы объявляете параметр param1, но не добавляете его в список параметров. Вместо него добавляете какой-то другой параметр, не указывая ему, что он Output.

и SELECT @id не нужен в процедуре, если вы собираетесь читать значение через параметр
...
Рейтинг: 0 / 0
WPF + MSSQL получить значение выходного параметра.
    #39916263
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select @id; это скалярный тип запроса
лично я не ценитель output параметров в запросах
есть ли смысл явно вызывать Close(), в конструкции using будет вызов Dispose, где произойдет закрытие соединения, кто как думает? :)
...
Рейтинг: 0 / 0
WPF + MSSQL получить значение выходного параметра.
    #39916270
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
select @id; это скалярный тип запроса

Тем не менее, в таком случае процедура вернёт вполне нескалярную выборку.
Roman Mejtes
лично я не ценитель output параметров в запросах

Их в запросах и нет, это фича исключительно процедурных расширений SQL.
Roman Mejtes
есть ли смысл явно вызывать Close(), в конструкции using будет вызов Dispose, где произойдет закрытие соединения, кто как думает? :)

Я не вызываю.
...
Рейтинг: 0 / 0
WPF + MSSQL получить значение выходного параметра.
    #39916493
Shocker.Pro
Евгений Стронг
Что делаю не так?

Евгений Стронг
Код: c#
1.
2.
3.
                    SqlParameter param1 = new SqlParameter();
                    param1.Direction = ParameterDirection.Output;
                    myCommand.Parameters.Add("@id", SqlDbType.Int).Value = 8;

вы объявляете параметр param1, но не добавляете его в список параметров. Вместо него добавляете какой-то другой параметр, не указывая ему, что он Output.

Можно немного подробнее? Не вижу проблему у себя.

и SELECT @id не нужен в процедуре, если вы собираетесь читать значение через параметр


А как тогда получить результат? Если выполнять без select, то студия возвращает просто сообщение - затронуто столько то строк, например. А мне же нужно именно значение.
...
Рейтинг: 0 / 0
WPF + MSSQL получить значение выходного параметра.
    #39916510
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронг
А как тогда получить результат? Если выполнять без select, то студия возвращает просто сообщение - затронуто столько то строк, например. А мне же нужно именно значение.

А причем тут студия, вам же не в студию результат нужно, а в ADO

Определитесь, каким образом вы хотите получить результат
1) можно через SELECT (вернется набор записей, в частном случае одна запись с одним полем)
2) можно через RETURN (вернется int)
3) можно через @Param OUTPUT

А сейчас вы непонятно что с непонятно чем пытаетесь скрестить
...
Рейтинг: 0 / 0
WPF + MSSQL получить значение выходного параметра.
    #39916513
Shocker.Pro
Евгений Стронг
А как тогда получить результат? Если выполнять без select, то студия возвращает просто сообщение - затронуто столько то строк, например. А мне же нужно именно значение.

А причем тут студия, вам же не в студию результат нужно, а в ADO

Определитесь, каким образом вы хотите получить результат
1) можно через SELECT (вернется набор записей, в частном случае одна запись с одним полем)
2) можно через RETURN (вернется int)
3) можно через @Param OUTPUT

А сейчас вы непонятно что с непонятно чем пытаетесь скрестить


Я максимально упростил задачу. Создал процедуру

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ALTER PROCEDURE test 
	-- Add the parameters for the stored procedure here
  @testparam nvarchar(1),
  @outparam nvarchar(1) output
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT OFF;

    -- Insert statements for procedure here
	SET @outparam = '1'
	select @outparam
END
GO



Код: 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.
31.
32.
using (SqlConnection cn = new SqlConnection())
            {
                cn.ConnectionString = connect.ConnectionString;
                try
                {

                    cn.Open();

                    SqlCommand myCommand = new SqlCommand("test", cn);


                    myCommand.CommandType = CommandType.StoredProcedure;
                    // Входной параметр.
                    
                    SqlParameter param1 = new SqlParameter();
                    param1.Direction = ParameterDirection.Input;
                    myCommand.Parameters.Add("@testparam", SqlDbType.NVarChar, 20).Value = "1";

                    SqlParameter param2 = new SqlParameter();
                    param2.Direction = ParameterDirection.Output;
                    myCommand.Parameters.Add("@outparam", SqlDbType.NVarChar).Value = '8';

                    // Выполнение хранимой процедуры.
                    myCommand.ExecuteReader();
                    // Возврат выходного параметра
                    label1.Content = Convert.ToString(myCommand.Parameters[1].Value);
                }

                catch (SqlException ex)
                {
                    MessageBox.Show("Ошибка: " + ex);
                }



Что тут не так сейчас? Не понятно.
...
Рейтинг: 0 / 0
WPF + MSSQL получить значение выходного параметра.
    #39916528
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Стронг
Что тут не так сейчас? Не понятно.
Я уже писал выше. Для @outparam не указан ParameterDirection
...
Рейтинг: 0 / 0
WPF + MSSQL получить значение выходного параметра.
    #39916537
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
метод адд возвращает объект параметра, его и надо настраивать или передать его настроенным как аргумент
...
Рейтинг: 0 / 0
WPF + MSSQL получить значение выходного параметра.
    #39916565
Shocker.Pro
Евгений Стронг
Что тут не так сейчас? Не понятно.
Я уже писал выше. Для @outparam не указан ParameterDirection


Вот так?

Код: c#
1.
2.
3.
SqlParameter @outparam = new SqlParameter();
@outparam.Direction = ParameterDirection.Output;
myCommand.Parameters.Add("@outparam", SqlDbType.NVarChar).Value = '8';



Но тоже не работает.
...
Рейтинг: 0 / 0
WPF + MSSQL получить значение выходного параметра.
    #39916580
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений, похоже, вам следует сначала подучить синтаксис C#, а потом что-то более сложное.

Вы эти два примера откуда взяли? Потому что в этих трех строках два не связанных между собой действия.

Это одно действие. Вы объявили переменную, но дальше она никак не используется:
Евгений Стронг
Код: c#
1.
2.
SqlParameter @outparam = new SqlParameter();
@outparam.Direction = ParameterDirection.Output;



Это второе действие, не связанное с первым. Оно добавляет параметр к команде, но это параметр не output, потому что это нигде не указано:
Евгений Стронг
Код: c#
1.
myCommand.Parameters.Add("@outparam", SqlDbType.NVarChar).Value = '8';

...
Рейтинг: 0 / 0
WPF + MSSQL получить значение выходного параметра.
    #39916581
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот учебник по ADO.NET
https://metanit.com/sharp/adonet/2.10.php

Но, повторюсь, у вас непонимание синтаксиса C#, а не ADO.NET
...
Рейтинг: 0 / 0
WPF + MSSQL получить значение выходного параметра.
    #39916593
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Вот учебник по ADO.NET
https://metanit.com/sharp/adonet/2.10.php

Но, повторюсь, у вас непонимание синтаксиса C#, а не ADO.NET

проблемы не в синтаксисе, но сформулировать свою мысль я не могу, так как хочу спать :)
...
Рейтинг: 0 / 0
WPF + MSSQL получить значение выходного параметра.
    #39916747
Shocker.Pro
Вот учебник по ADO.NET
https://metanit.com/sharp/adonet/2.10.php

Но, повторюсь, у вас непонимание синтаксиса C#, а не ADO.NET


Спасибо за информацию. Всё получилось. Более того, я делал предыдущий код по примеру из интернета. Видимо не компетентный попался "учитель". Перехожу с Delphi на C# (переписываю свой проект ранее созданный на Delphi + MySQL). И вот добрался до работы с компонентами SQL. Но всё-равно вспоминаю Delphi. Как там одной рукой с помощью мышки настраивал компоненты, а другой вытирал слёзы счастья.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF + MSSQL получить значение выходного параметра.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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