Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка в хранимой процедуре, указано слишком много аргументов  
V
    Опции темы
ДобренькийПапаша
Дата 28.7.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Есть такой код C#:
Код

using (SqlConnection curConnect =
                        ProcInvoke.GetDBConnection(ProcInvoke.ServerPath, ProcInvoke.DataBasePath))
                {
                    try
                    {
                        curConnect.Open();
                        
                        SqlCommand cmdForAddFaculty = new SqlCommand("UpdateFaculty", curConnect);
                        cmdForAddFaculty.CommandType = CommandType.StoredProcedure;
                        cmdForAddFaculty.Parameters.Add(ProcInvoke.GetParameter("@FacNewShortName",
                                                                                SqlDbType.VarChar, 50,
                                                                                curEx.propFacShortName,
                                                                                ParameterDirection.Input));
                        cmdForAddFaculty.Parameters.Add(ProcInvoke.GetParameter("@FacNewFullName",
                                                                                SqlDbType.VarChar, 50,
                                                                                curEx.propFacFullName,
                                                                                ParameterDirection.Input));
                        cmdForAddFaculty.Parameters.Add(ProcInvoke.GetParameter("@FacOldFullName",
                                                                                SqlDbType.VarChar, 50,
                                                                                FacultyCathedralTree.SelectedNode.Text,
                                                                                ParameterDirection.Input));
                        cmdForAddFaculty.Parameters.Add(ProcInvoke.GetParameter("@countCourses",
                                                                                SqlDbType.Int, 0,
                                                                                curEx.propGrade,
                                                                                ParameterDirection.Input));
                        cmdForAddFaculty.ExecuteNonQuery();
                        curConnect.Close();
                    }
                    catch(SqlException ex)
                    {
                        MessageBox.Show(ex.Message, ex.Source);
                    }
                }


И код хранимой процедуры:
Код

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[UpdateFaculty]
@FacNewShortName varchar(50),
@FacNewFullName varchar(50),
@FacOldFullName varchar(50),
@countCourses int
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE Faculties
    SET ShortName=@FacNewShortName, FullName=@FacNewFullName,    coursesCount=@countCourses
    WHERE FullName=@FacOldFullName

END




Срабатывает catch и говорит: "Для процедуры или функции UpdateFaculty указано слишком много аргументов"...

Вопрос:Почему? В хранимых процедурах нельзя использовать более трёх входных параметров smile? Что делать? 

Это сообщение отредактировал(а) ДобренькийПапаша - 28.7.2009, 17:25


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
jonie
Дата 28.7.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



0) проверьте sqlcommand скачав отсюда http://www.codechimp.org/FilePal/Default.a...%202005%20Tools штуку SQL Command Visualizer, она вам и в будущем пригодится 8)

1) еще раз проверить что с сервера того на который вы соединяетесь в программе взята процедура приведенная (sp_helptext вам поможет).

2) снять трассировку с сервра используя профайлер



с виду вроде все ок...
правда непонятно что такое ProcInvoke.GetParameter и работает ли он хорошо.




--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ДобренькийПапаша
Дата 30.7.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



jonie, собственно ничего не трогая сделал как вы сказали:

Код

USE TaxAcademyBase
GO
EXEC sp_help 'UpdateFaculty'
GO


и получил в ответ три параметра:
@FacNewShortName
@FacNewFullName
@FacNewOldName

а четвёртого просто нет... ну и ну... Я ещё пока ничего не исправил, но честно говоря вот так с первого взгляда непонятно почему такой результат получаю... Вроде в процедуре всё правильно (такое ощущение, хотя теперь ясно что это не так).

Добавлено через 11 минут и 23 секунды
Хм... удалил стаую процедуру, сделал такую же практически только дал новое имя процедуре и поставил параметр типа int первым, теперь всё работает. Я рад что теперь работает, но вопрос всё же интересует, каковы возможные причины той ошибки, что возникала? Почему процедура может не видеть параметр?


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
ДобренькийПапаша
Дата 30.7.2009, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Понял почему такая ошибка была. Первоначально эта процедура содержала три параметра, потом я её расширил... Хранимые процедуры хранятся в компилированном виде, после добавления параметра в студии кнопку выполнить я не нажал, а следовательно sp_recompile не выполнился... отсюда и проблема. Внимательней надо быть)))


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.