指定的参数太多

hol*_*ard 3 c# sql asp.net stored-procedures

我正在开发一个应用程序,它允许人们列出电影以及编辑,插入和删除它们.在db我有三个表(Movie,Genre和MovieGenre),这个问题与向电影添加一个类型有关(通过添加到MovieGenre表,它保存了电影类型的轨迹).

下面是相关代码,以及抛出的异常.我只是无法弄清楚为什么我收到此错误消息,因为我使用正确数量的参数,因为我可以在调用sproc时在c#代码中看到它.

有人能看出这里的问题是什么吗?

例外: 过程或函数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 {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

存储过程:

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

Pra*_*ana 8

因为这条线的错误

cmd.Parameters.Add("@MovieGenreID", SqlDbType.Int, 4).Direction = ParameterDirection.Output; 
Run Code Online (Sandbox Code Playgroud)

解决修改存储的procdeurre

存储过程:

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
Run Code Online (Sandbox Code Playgroud)