Задано слишком много аргументов - PullRequest
3 голосов
/ 14 марта 2012

Я работаю над приложением, которое позволяет перечислять фильмы, а также редактировать, вставлять и удалять их.В БД у меня есть три таблицы (Movie, Genre и MovieGenre), и эта проблема связана с добавлением жанра в фильм (путем добавления в таблицу MovieGenre, в которой отслеживаются жанры фильмов).

Нижеэто соответствующий код, а также выброшенное исключение.Я просто не могу понять, почему я получаю это сообщение об ошибке, потому что я использую правильное количество аргументов, как я вижу это в коде c # при вызове sproc.

Может кто-нибудь увидеть, в чем здесь проблема?

Исключение: В процедуре или функции usp_InsertMovieGenre указано слишком много аргументов.

Сведения об исключении: System.Data.SqlClient.SqlException: Процедура или функцияУ usp_InsertMovieGenre слишком много аргументов.

c # код:

public void InsertMovieGenre(MovieGenre movieGenre) {

    using (SqlConnection conn = CreateConnection()) {
        try {
            SqlCommand cmd = new SqlCommand("dbo.usp_InsertMovieGenre", conn);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add("@MovieID", SqlDbType.Int, 4).Value = movieGenre.MovieID;
            cmd.Parameters.Add("@GenreID", SqlDbType.Int, 4).Value = movieGenre.MovieGenreID;

            cmd.Parameters.Add("@MovieGenreID", SqlDbType.Int, 4).Direction = ParameterDirection.Output;

            conn.Open();

            cmd.ExecuteNonQuery();

            movieGenre.MovieID = (int)cmd.Parameters["@MovieGenreID"].Value;
        }
        catch {
        }
    }
}

sproc:

ALTER PROCEDURE usp_InsertMovieGenre
@GenreID varchar(500),
@MovieID int
AS
BEGIN
    INSERT INTO MovieGenre (GenreID, MovieID)
    VALUES (@GenreID, @MovieID);
END
GO

Ответы [ 3 ]

8 голосов
/ 14 марта 2012

Ошибка из-за этой строки

cmd.Parameters.Add("@MovieGenreID", SqlDbType.Int, 4).Direction = ParameterDirection.Output; 

для разрешения изменения сохраненного процесса

sproc:

ALTER PROCEDURE usp_InsertMovieGenre
    @GenreID varchar(500),
    @MovieID int,
    @MovieGenreID int output

    AS
    BEGIN
        INSERT INTO MovieGenre (GenreID, MovieID)
        VALUES (@GenreID, @MovieID);
     SELECT @MovieGenreID = @@identity   
    END
    GO
2 голосов
/ 14 марта 2012

Вы должны добавить этот выходной параметр в свою хранимую процедуру:

ALTER PROCEDURE usp_InsertMovieGenre
@GenreID varchar(500),
@MovieID int,
@MovieGenreID int OUTPUT
AS
BEGIN
    INSERT INTO MovieGenre (GenreID, MovieID)
    VALUES (@GenreID, @MovieID);
    SELECT @MovieGenreID = SCOPE_IDENTITY();
END
GO
1 голос
/ 14 марта 2012

Удалить эту строку. Ваш Sproc принимает только первые два параметра

cmd.Parameters
  .Add("@MovieGenreID", SqlDbType.Int, 4)
  .Direction = ParameterDirection.Output;

edit: для создания идентификатора вы можете использовать newId (). Который выглядит твоим намерением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...