[英]How to set SQL Server procedure variables to inputted data from C# ASP.NET MVC program?
When using this code, I get an error使用此代码时,出现错误
Procedure or function 'Registration' expects parameter '@qUsername', which was not supplied
过程或函数“Registration”需要参数“@qUsername”,但未提供
Can someone please tell me how to fix this?有人可以告诉我如何解决这个问题吗? This is my controller code and the SQL query for registration
这是我的控制器代码和用于注册的 SQL 查询
public ActionResult Create([Bind(Include = "UserID,Username,FirstName,LastName,Email,Password,Number,IsAdmin,Salt")] UsersTable usersTable)
{
if (ModelState.IsValid)
{
Int32 rowsAffected;
SqlCommand cmd = new SqlCommand();
SqlConnection sqlConnection1 = new SqlConnection(@"xxx");
cmd.CommandText = "dbo.Registration";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
rowsAffected = cmd.ExecuteNonQuery();
sqlConnection1.Close();
return RedirectToAction("Index");
}
return View(usersTable);
}
Procedure code:程序代码:
CREATE PROCEDURE dbo.Registration
@qUsername NVARCHAR(50),
@qPassword NVARCHAR(50),
@qFirstName NVARCHAR(40),
@qLastName NVARCHAR(40),
@errorResponse NVARCHAR(250) OUTPUT
AS
BEGIN
SET NOCOUNT ON
DECLARE @salt UNIQUEIDENTIFIER = NEWID()
BEGIN TRY
INSERT INTO dbo.UsersTable (UserID, Password, Salt, FirstName, LastName)
VALUES (@qUsername, HASHBYTES('SHA2_512', @qPassword + CAST(@salt AS NVARCHAR(36))), @salt, @qFirstName, @qLastName)
SET @errorResponse = 'Success'
END TRY
BEGIN CATCH
SET @errorResponse = ERROR_MESSAGE()
END CATCH
END
You need to define and set the parameters for the stored procedure before your call it from your C# code - like this:在从 C# 代码调用存储过程之前,您需要为存储过程定义和设置参数 - 如下所示:
cmd.CommandText = "dbo.Registration";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = sqlConnection1;
// define and set parameters!
cmd.Parameters.Add("@qUsername", SqlDbType.NVarChar, 50).Value = .....;
cmd.Parameters.Add("@qPassword", SqlDbType.NVarChar, 50).Value = .....;
cmd.Parameters.Add("@qFirstName", SqlDbType.NVarChar, 40).Value = .....;
cmd.Parameters.Add("@qLastName", SqlDbType.NVarChar, 40).Value = .....;
cmd.Parameters.Add("@errorResponse", SqlDbType.NVarChar, 250).Direction = ParameterDirection.Output;
sqlConnection1.Open();
rowsAffected = cmd.ExecuteNonQuery();
sqlConnection1.Close();
Use the following:使用以下内容:
cmd.Parameters.AddWithValue("@qUsername", "xxxxx");
For all parameters before calling:对于调用前的所有参数:
cmd.ExecuteNonQuery();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.