Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
1
MS SQL

Parameter expected, but was not supplied

04.11.2016, 22:51. Показов 1535. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть хранимая процедура:
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
USE [usersdb]
GO
/****** Object:  StoredProcedure [dbo].[sp_GetAgeRange]    Script Date: 05.11.2016 0:30:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_GetAgeRange]
    @name nvarchar(50) = '%',
    @minAge INT OUT,
    @maxAge INT OUT
AS
    SELECT @minAge = MIN(Age), @maxAge = MAX(Age) FROM Users WHERE Name LIKE @name

Вызываю метод:
Кликните здесь для просмотра всего текста
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
    static void GetAgeRange(string name)
    {
        using (var connection = new DefaultOpenedSqlConnection())
        {
            var expression = "sp_GetAgeRange";
            var command = new SqlCommand(expression, connection);
 
            if (!string.IsNullOrEmpty(name))
            {
                command.Parameters.Add(new SqlParameter
                    {
                        ParameterName = "@name",
                        SqlDbType = System.Data.SqlDbType.NVarChar,
                        Value = name,
                    });
            }
 
            var min = new SqlParameter()
                {
                    ParameterName = "@minAge",
                    SqlDbType = System.Data.SqlDbType.Int,
                    Direction = System.Data.ParameterDirection.Output,
                };
 
            var max = new SqlParameter()
                {
                    ParameterName = "@maxAge",
                    SqlDbType = System.Data.SqlDbType.Int,
                    Direction = System.Data.ParameterDirection.Output,
                };
 
            command.Parameters.Add(min);
            command.Parameters.Add(max);
            
            command.ExecuteNonQuery();
            Console.WriteLine("Age range is {0} - {1}", min.Value, max.Value);
        }
    }

Получаю результат: {"Procedure or function 'sp_GetAgeRange' expects parameter '@minAge', which was not supplied."}
Подскажите, что я делаю не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2016, 22:51
Ответы с готовыми решениями:

Ошибка expects parameter @., which was not supplied
Пытаюсь написать хранимую процедуру на подсчет количества пользователей: CREATE PROCEDURE p1 ...

Warning: Parameter 3 to mb_videobot() expected to be a reference, value given in
установила компонент my blog,неудачно,удалила. Теперь на главной странице сайта такая надпись:...

Параметрический запрос: ошибка parameter name expected
Я хочу сделать запрос, чтобы при выбора определенного водителя и нажатии, выводились рейсы этого...

Warning: Parameter 1 to modMainMenuHelper::buildXML() expected to be a reference
Народ, нужна помощь. Сегодня впервые попробывал создать сайт с помощью джумлы(на самом деле вообще...

6
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
04.11.2016, 23:21 2
TopLayer, для out параметров нужно тоже указать значение в SQL или в C#. Скорее в SQL раз они используются только для возврата значений
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
USE [usersdb]
GO
/****** Object:  StoredProcedure [dbo].[sp_GetAgeRange]    Script Date: 05.11.2016 0:30:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_GetAgeRange]
    @name nvarchar(50) = '%',
    @minAge INT OUT = NULL,
    @maxAge INT OUT = NULL
AS
    SELECT @minAge = MIN(Age), @maxAge = MAX(Age) FROM Users WHERE Name LIKE @name
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
04.11.2016, 23:34  [ТС] 3
OwenGlendower, На ваши правки ругается: неверный синтаксис.
В C# пробовал и Value = null и Value = 0 - результат един

Добавлено через 3 минуты
Сделал так, эксэпшена нет, но результат пустой
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
USE [usersdb]
GO
/****** Object:  StoredProcedure [dbo].[sp_GetAgeRange]    Script Date: 05.11.2016 0:30:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_GetAgeRange]
    @name nvarchar(50) = '%',
    @minAge INT = NULL OUT,
    @maxAge INT = NULL OUT
AS
    SELECT @minAge = MIN(Age), @maxAge = MAX(Age) FROM Users WHERE Name LIKE @name
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
04.11.2016, 23:36 4
TopLayer, писал без проверки. Нужно сначала инициализацию потом ключеовое слово OUT
T-SQL
1
2
    @minAge INT = NULL OUT,
    @maxAge INT = NULL OUT
Добавлено через 2 минуты
Цитата Сообщение от TopLayer Посмотреть сообщение
Сделал так, эксэпшена нет, но результат пустой
Значит запрос внутри SP ничего не вернул. Что передается в @name?
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
05.11.2016, 00:13  [ТС] 5
OwenGlendower, что угодно, всё равно пусто
C#
1
2
3
4
5
6
    static void Main(string[] args)
    {
        AddUser("Tommy Angelo", 45);
        GetUsers();
        GetAgeRange("Tommy Angelo");
    }
Добавлено через 12 минут
это зануление просто позволяет вообще параметры не передавать

Добавлено через 19 минут
Решил проблему, всего-навсего добавил
C#
1
command.CommandType = System.Data.CommandType.StoredProcedure;
Ох уж эти базы.
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
05.11.2016, 00:19 6
TopLayer, если в таблице есть строка где Name = 'Tommy Angelo', то запрос должен работать. Проверь его сначала в Management Studio. Ну и раз в запросе используется LIKE, то логично добавлять % к значению параметра.

Не по теме:

Цитата Сообщение от TopLayer Посмотреть сообщение
sp_GetAgeRange
Префикс sp_ лучше не использовать. Процедуры с таким именем сначала ищутся в master.

1
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
05.11.2016, 00:28  [ТС] 7
Ошибку я нашёл, но всё же интересно: как эта команда пыталась интерпретироваться
0
05.11.2016, 00:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.11.2016, 00:28
Помогаю со студенческими работами здесь

В чём суть ошибки? Warning: Parameter 3 to showBlogSection() expected to be a reference, value given in on line 100
Здравствуйте. Не могу понять в чем суть ошибки Warning: Parameter 3 to showBlogSection() expected...

Warning: trim() expects parameter 1 to be string, array given in J:\home\wagure\www\libraries\joomla\html\parameter.php on line 83
// Set base path $this->_elementPath = dirname( __FILE__ ).DS.'parameter'.DS.'element'; if...

Ошибка missing default parameter for parameter
вот программка #include <iostream> #include <conio.h> using namespace std; int n,i,d; ...

Error: declaration for parameter 'slov_ar' but no such parameter
Как исправить Ошибки: Untitled1.c||In function 'main':| Untitled1.c|26|warning: no semicolon at...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru