指定的参数太多
本文关键字:太多 参数 | 更新日期: 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()。这看起来是你的意图。