Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我一直得到一个错误,即contactDeleteById函数需要param@contactID,但我认为下面的代码没有任何问题_C#_Sql_Asp.net - Fatal编程技术网

C# 我一直得到一个错误,即contactDeleteById函数需要param@contactID,但我认为下面的代码没有任何问题

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应如下所

下面是我的sql代码:-

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);