当自动生成参数时,过程或函数需要未提供的参数

本文关键字:参数 自动生成 过程 函数 | 更新日期: 2023-09-27 18:33:05

我正在尝试在我的数据库中插入数据。 这是我使用的代码

SqlCommand cmd = new SqlCommand("dbo.UsersInsert", cnn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@UserID", SqlDbType.Int);
cmd.Parameters.AddWithValue("@UserFirstName", FirstName.Text);
cmd.Parameters.AddWithValue("@UserMiddleName", MiddleName.Text);
cmd.Parameters.AddWithValue("@UserLastName", LastName.Text);

等。。。

它给了我错误

过程或函数"用户插入"需要参数"@UserID",这 没有提供。

on cmd.ExecuteNonQuery(); line.

在这里,我的用户 ID 在我的数据库中自动生成。我该如何解决此问题?

存储过程

 @UserID INT OUTPUT,   
 @UserFirstName VARCHAR (50),  
 @UserMiddleName VARCHAR (50),  
 @UserLastName VARCHAR (50), etc... 
AS  
SET NOCOUNT ON  
DECLARE @ReturnValue int  
BEGIN  
 SELECT @ReturnValue = 0  
 INSERT [Users]  
 ( 
            [UserFirstName]
           ,[UserMiddleName]
           ,[UserLastName] etc... 
 values (
         @UserFirstName,  
                 @UserMiddleName,  
                 @UserLastName,  etc.. )
IF (@@Error <> 0) GOTO ERROR_HANDLER
 GOTO OnExit  
END  

当自动生成参数时,过程或函数需要未提供的参数

你应该把它变成一个ParameterDirection.Output

SqlParameter userIdParam = new SqlParameter("@UserID", SqlDbType.Int);
userIdParam.Direction = ParameterDirection.Output;
cmd.Parameters.Add(userIdParam);

这样您就不必提供值

以下代码应该可以工作,更改 sql 以接受参数

SqlCommand cmd = new SqlCommand("dbo.UsersInsert @UserID out, @UserFirstName, @UserMiddleName, @UserLastName", cnn);

然后按如下方式更改参数

var id = new SqlParameter("UserID", System.Data.SqlDbType.Int);
id.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(id);
cmd.Parameters.AddWithValue("UserFirstName", FirstName.Text);
cmd.Parameters.AddWithValue("UserMiddleName", MiddleName.Text);
cmd.Parameters.AddWithValue("UserLastName", LastName.Text);