Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Stored procedures ADO.NET中的存储过程错误_Stored Procedures_Ado.net - Fatal编程技术网

Stored procedures ADO.NET中的存储过程错误

Stored procedures ADO.NET中的存储过程错误,stored-procedures,ado.net,Stored Procedures,Ado.net,我这里有个情况。我的存储过程在SQL Server中完全可以正常工作 但是,我无法在ADO.NET中实现同样的功能 以下是我的存储过程: Create Procedure bridge_Type( @EmpID INT, @Name varchar(50), @Mob2 numeric(10,0), @Email varchar(50), @Type varchar(50) ) AS DECLARE @TYPEID int Set NOCOUNT OFF BEGIN TRANS

我这里有个情况。我的存储过程在SQL Server中完全可以正常工作

但是,我无法在ADO.NET中实现同样的功能

以下是我的存储过程:

Create Procedure bridge_Type(
@EmpID INT,
@Name   varchar(50),
@Mob2   numeric(10,0),
@Email  varchar(50),
@Type   varchar(50)
)
AS 
DECLARE @TYPEID int
Set NOCOUNT OFF

BEGIN TRANSACTION

INSERT INTO dbo.EmpType VALUES (@Type)

SET @TYPEID = SCOPE_IDENTITY()

IF @@ERROR <> 0 
BEGIN     
ROLLBACK     
RETURN 
END 


Insert into dbo.Emp VALUES (@EmpID, @Name, @Mob2, @Email, @TYPEID)
IF @@ERROR <> 0
BEGIN 
ROLLBACK
RETURN
END

COMMIT 

您似乎错过了@Mob2参数中的int转换:

cmd.Parameters.Add(new SqlParameter("@Mob2", SqlDbType.Int));
cmd.Parameters["@Mob2"].Value = Convert.ToInt32(TextBox3.Text);
编辑:
谢谢大卫看到这一切。您要添加的最后一个参数名为@Emptype,但存储的进程希望将其命名为@Type。

“无法将参数值从字符串转换为Int32。”这是错误的,因为这有点棘手。。dropdown1值必须转到其他表。。自动生成一个名为“TypeID”的列,然后将其发送回父表dbo.Emp(EmpType)。。我不知道怎么做..您的异常处理正在丢弃有用的信息。不要创建新的异常。要么重新抛出现有的异常,要么将现有的异常添加为内部异常,或者更好,因为您实际上没有以任何方式处理异常,所以不要在代码中的该位置捕获它。它表示“插入错误:过程或函数”bridge_Type“需要参数“@Type”,它的意思是-dropdown1值必须转到其他表。。有一个名为“TypeID”的列是自动生成的,然后将其发送回父表dbo.Emp(EmpType)。。我不知道该怎么做。@Girish:您之所以会出现这个错误,是因为您发送了一个名称不正确的参数。在存储过程中,它需要一个名为“Type”的参数,但您需要发送一个名为“Emptype”的参数。将“Emptype”的名称更改为“Type”以匹配预期的参数。啊,因此出现了两个问题:@Mob2上的强制转换错误和参数拼写错误。不知道我怎么错过了第二个:)答案编辑。
cmd.Parameters.Add(new SqlParameter("@Mob2", SqlDbType.Int));
cmd.Parameters["@Mob2"].Value = Convert.ToInt32(TextBox3.Text);