SSIS脚本组件调用存储过程返回-1

时间:2014-03-18 15:18:02

标签: stored-procedures ssis return-value script-component

我尝试实现对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()

2 个答案:

答案 0 :(得分:0)

-1可能意味着存储过程无法按预期执行,并且事务已回滚。您可能希望查找任何截断问题,因为您有2个输入参数的不同大小但使用相同的输入。另外我假设您有正确的代码来打开和关闭连接等?

答案 1 :(得分:-1)

-1 返回值是执行SP时产生的错误,原因如下:

  1. 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

  2. 数据库连接(表名和位置):您必须在OLEDB中指定将您连接到写入DB的 ConnectionString 。尝试测试完整的表路径;如下所示;

    插入 [DATABASENAME]。[SHCEMA]。[TABELNAME] (     名称,     由...制作) VALUES (@p_TestName,     @p_CreatedBy)

  3. 将您的SP定义为:

    创建程序[NAME]

    AS 的 BEGIN END

  4. 认为这不是问题,但这是根据连接事务编写SP的正确方法,

    让我知道它是否适合你:)

    Regrads, S.ANDOURA