指定的参数太多

本文关键字:太多 参数 | 更新日期: 2023-09-27 18:27:49

我正在开发一个应用程序,该应用程序允许列出电影以及编辑、插入和删除它们。在数据库中,我有三个表(Movie、Genre和MovieGenre),这个问题与向电影添加类型有关(通过向表中添加MovieGene,它可以跟踪电影类型)。

下面是相关的代码,以及抛出的异常。我只是不明白为什么会收到这个错误消息,因为在调用存储过程时,我使用了正确数量的参数,正如我在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 {
        }
    }
}

存储过程:

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

指定的参数太多

由于该行而导致的错误

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

解决修改存储的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

您必须将此输出参数添加到存储过程中:

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
  • 使用OUTPUT参数返回数据
  • SCOPE_IDENTITY

删除此行。您的Sproc只接受前两个参数

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

edit:要创建id,我相信你可以使用newId()。这看起来是你的意图。