我试图通过传递参数来调用SQL中的更新存储过程,它需要在特定的ID值进行更新。这是我一直得到的错误:
System.Data.SqlClient.SqlException: Procedure or function 'updateEmployeeRecord' expects parameter '@Id', which was not supplied.堆栈跟踪;
[SqlException (0x80131904): Procedure or function 'updateEmployeeRecord' expects parameter '@Id', which was not supplied.]
EmployeeClass.Data.EmployeeList.EditEmpInfo(String connectionString, EmployeeList empInfo) in C:\Users\nsamuels\Documents\Induction Exercises\MasterPageTest\Exercise2\EmployeeData\Data\EmployeeClass.cs:120
EmployeeData.About.btnAdd_Click(Object sender, EventArgs e) in C:\Users\nsamuels\Documents\Induction Exercises\MasterPageTest\Exercise2\EmployeeData\About.aspx.cs:80
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9774694
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +211
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1696ASP .NET中的代码:
public void EditEmpInfo(string connectionString, EmployeeList empInfo)
{
try
{
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
string proc2 = "updateEmployeeRecord";
SqlCommand cmd = new SqlCommand(proc2, con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@IDNUmber", empInfo.IDNumber));
cmd.Parameters.Add(new SqlParameter("@EmployeeNumber", empInfo.EmployeeNumber));
cmd.Parameters.Add(new SqlParameter("@EmployeeSurname", empInfo.employeeSurname));
cmd.Parameters.Add(new SqlParameter("@EmployeeName", empInfo.employeeName));
cmd.Parameters.Add(new SqlParameter("@NumOfDependants", empInfo.numberOfDependants));
cmd.Parameters.Add(new SqlParameter("@Employee_RaceId", empInfo.RaceId));
cmd.Parameters.Add(new SqlParameter("@Employee_GenderId", empInfo.GenderId));
cmd.ExecuteNonQuery();
con.Close();
}
}
catch (Exception ex)
{
throw ex;
}
}SQL存储过程:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[updateEmployeeRecord]
@Id int,
@EmployeeNumber varchar(50),
@IDNumber varchar(50),
@EmployeeSurname varchar(50),
@EmployeeName varchar(50),
@NumOfDependants int,
@Employee_RaceId int,
@Employee_GenderId int
AS
BEGIN
UPDATE dbo.Employees
SET
EmployeeNumber = @EmployeeNumber,
IDNumber = @IDNumber,
EmployeeSurname = @EmployeeSurname,
EmployeeName = @EmployeeName,
NumOfDependants = @NumOfDependants,
Employees_RaceId = @Employee_RaceId,
Employees_GenderId = @Employee_GenderId
WHERE Id =@Id
END如果我添加下面这一行,什么也不会发生,它只是返回到Default.aspx。
cmd.Parameters.Add(new SqlParameter("Id", empInfo.id));我需要它做的基本上是更新数据库中特定ID的记录,即使它只有一个值。
编辑:我发现了问题所在。我不需要引用ID值。
发布于 2020-11-04 19:59:20
您的参数不一致,因为所有其他参数都是"@parmName",而您的ID只是"Id“,而不是"@Id”。不知道是不是这样。但是,我一直不喜欢让参数名与表中的列名称完全匹配。我通常会让我的参数名以"@p“开头,以表示它是一个参数变量,而不仅仅是列名。防止阅读时的歧义。所以,这是一个建议。
此外,存储过程可能会阻塞,因为您没有调用标识参数的过程,例如
string proc2 = "updateEmployeeRecord( @Id, @EmployeeNumber, @IDNumber, @restOfParms )"; 然后将"@“参数定义为命令参数,以匹配updateEmployeeRecord from proc2字符串中的占位符。
https://stackoverflow.com/questions/64678802
复制相似问题