我尝试实现对Stored proc的调用,proc返回稍后将使用的ID。 每次执行时我都会将out参数设为-1。以下是我的示例代码:
OleDbCommand sqlStrProc = new OleDbCommand();
sqlStrProc.Connection = dbConn;
sqlStrProc.CommandText = "dbo.insert_test";
sqlStrProc.CommandType = CommandType.StoredProcedure;
sqlStrProc.Parameters.Add("@p_TestID", OleDbType.Integer, 255).Direction = ParameterDirection.Output;
sqlStrProc.Parameters.Add("@p_TestName", OleDbType.VarChar).Value = "Test";
sqlStrProc.Parameters.Add("@p_CreatedBy", OleDbType.VarChar).Value = "Test";
int personID = sqlStrProc.ExecuteNonQuery();
Row.outPersonID = personID;
personID始终为-1。我在这做错了什么。请帮忙..!! 以下是存储的proc代码
CREATE PROCEDURE [dbo].[INSERT_TEST]
@p_TestID int OUTPUT,
@p_TestName varchar (50),
@p_CreatedBy varchar (100)
AS
SET NOCOUNT ON
INSERT INTO Test(
TestName,
CreatedBy)
VALUES
( @p_TestName,
@p_CreatedBy)
SELECT @p_TestID = SCOPE_IDENTITY()
答案 0 :(得分:0)
-1可能意味着存储过程无法按预期执行,并且事务已回滚。您可能希望查找任何截断问题,因为您有2个输入参数的不同大小但使用相同的输入。另外我假设您有正确的代码来打开和关闭连接等?
答案 1 :(得分:-1)
-1 返回值是执行SP时产生的错误,原因如下:
SP结构:每次执行SP时,它都会尝试再次创建它,而它已经存在。因此,您必须使其成为 ALTER PROCEDURE而不是 CREATE PROCEDURE或执行以下操作:
IF EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N' [dbo]。[INSERT_TEST]')并输入(N' P',N' PC')) DROP PROCEDURE [dbo]。[INSERT_TEST] GO
创建 PROCEDURE [dbo]。[INSERT_TEST] @p_TestID int OUTPUT, @p_TestName varchar(50), @p_CreatedBy varchar(100) AS
数据库连接(表名和位置):您必须在OLEDB中指定将您连接到写入DB的 ConnectionString 。尝试测试完整的表路径;如下所示;
插入 [DATABASENAME]。[SHCEMA]。[TABELNAME] ( 名称, 由...制作) VALUES (@p_TestName, @p_CreatedBy)
将您的SP定义为:
创建程序[NAME]
AS 的 BEGIN END 强>
认为这不是问题,但这是根据连接事务编写SP的正确方法,
让我知道它是否适合你:)
Regrads, S.ANDOURA