首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用存储过程将ID参数从ASP .Net传递给SQL

使用存储过程将ID参数从ASP .Net传递给SQL
EN

Stack Overflow用户
提问于 2020-11-04 19:02:05
回答 1查看 48关注 0票数 1

我试图通过传递参数来调用SQL中的更新存储过程,它需要在特定的ID值进行更新。这是我一直得到的错误:

代码语言:javascript
复制
 System.Data.SqlClient.SqlException: Procedure or function 'updateEmployeeRecord' expects parameter '@Id', which was not supplied.

堆栈跟踪;

代码语言:javascript
复制
[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) +1696

ASP .NET中的代码:

代码语言:javascript
复制
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存储过程:

代码语言:javascript
复制
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。

代码语言:javascript
复制
cmd.Parameters.Add(new SqlParameter("Id", empInfo.id));

我需要它做的基本上是更新数据库中特定ID的记录,即使它只有一个值。

编辑:我发现了问题所在。我不需要引用ID值。

EN

回答 1

Stack Overflow用户

发布于 2020-11-04 19:59:20

您的参数不一致,因为所有其他参数都是"@parmName",而您的ID只是"Id“,而不是"@Id”。不知道是不是这样。但是,我一直不喜欢让参数名与表中的列名称完全匹配。我通常会让我的参数名以"@p“开头,以表示它是一个参数变量,而不仅仅是列名。防止阅读时的歧义。所以,这是一个建议。

此外,存储过程可能会阻塞,因为您没有调用标识参数的过程,例如

代码语言:javascript
复制
string proc2 = "updateEmployeeRecord( @Id, @EmployeeNumber, @IDNumber, @restOfParms )"; 

然后将"@“参数定义为命令参数,以匹配updateEmployeeRecord from proc2字符串中的占位符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64678802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档