C# 我一直得到一个错误,即contactDeleteById函数需要param@contactID,但我认为下面的代码没有任何问题
下面是我的sql代码:-C# 我一直得到一个错误,即contactDeleteById函数需要param@contactID,但我认为下面的代码没有任何问题,c#,sql,asp.net,C#,Sql,Asp.net,下面是我的sql代码:- ALTER PROC [dbo].[ContactDeleteByID] @ContactID int AS BEGIN DELETE FROM contact WHERE ContactID = @ContactID END 下面是我的C代码:-(我肯定写对了) 您之所以获得此信息,是因为@ContactID不可为空。您需要将其初始化为null 试试这个: @ContactID int=null 因此,您的SP应如下所
ALTER PROC [dbo].[ContactDeleteByID]
@ContactID int
AS
BEGIN
DELETE FROM contact
WHERE ContactID = @ContactID
END
下面是我的C代码:-(我肯定写对了)
您之所以获得此信息,是因为@ContactID不可为空。您需要将其初始化为null 试试这个:
@ContactID int=null
因此,您的SP应如下所示:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[ContactDeleteByID]
@ContactID int = null
AS
BEGIN
DELETE FROM contact
WHERE ContactID = @ContactID
END
您没有告诉命令它正在执行存储过程。您所要做的就是执行以下TSQL:
ContactDeleteByID
它正在执行该过程,但由于您没有传递@construcd参数(这是必需的),它会抛出一个错误
您有两个选项,首先明确声明“ContactDeleteByID”是一个存储过程,例如
SqlCommand sqlCmd = new SqlCommand("ContactDeleteByID",sqlCon);
sqlCmd.CommandType = CommandType.StoredProcedure;
或者,您可以更改SQL以包含参数,例如
SqlCommand sqlCmd = new SqlCommand("EXECUTE ContactDeleteByID @ContractID",sqlCon);
如果不执行EXECUTE
,这实际上是可行的,但我恳请您不要走这条捷径,因为这会使意图更加清晰
另一方面,我宁愿显式地提供您的数据类型,例如
sqlCmd.Parameters.Add("@ContactID", SqlDbType.Int.Value).Value = Convert.ToInt32(hfcontactID.Value);
告诉我们你的例外情况和你失败的更多细节。请你详细说明一下!对不起,如果很容易理解的话,我没有理解it@CodeJunkie,当它说
contactDeleteById需要参数@ContactID
时,它正在查找驻留在hfcontactID.value
Hiddenfield中的@ContactID的值。目前,您的hfcontactID.value
的值为null,并且由于SP中的@ContactID未初始化为默认值null(如我在回答中所示),因此您的应用程序需要该值。这产生了冲突,这就是它抛出错误的原因。您在hfcontactID.value
中得到的是null值,而不是一些实际值。如果该值为null,您的数据将不会被删除,因为它不会获得您删除数据所依据的ContactID。现在,你的工作是找出hiddenfield中的值(即hfcontactID中的值)为空的原因。爱你的人!终于成功了。从最近几天就开始了。再次感谢一百万的支持和支持clarification@CodeJunkie我很高兴这有帮助:)非常感谢你的详细解释。我终于解决了我的错误。非常支持你
sqlCmd.Parameters.Add("@ContactID", SqlDbType.Int.Value).Value = Convert.ToInt32(hfcontactID.Value);