Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/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 SSIS脚本组件调用存储过程返回-1_Stored Procedures_Ssis_Return Value_Script Component - Fatal编程技术网

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

Stored procedures SSIS脚本组件调用存储过程返回-1,stored-procedures,ssis,return-value,script-component,Stored Procedures,Ssis,Return Value,Script Component,我尝试实现对存储proc的调用,proc返回稍后将使用的ID。 每次执行时,我都会将out参数设置为-1。下面是我的示例代码: OleDbCommand sqlStrProc = new OleDbCommand(); sqlStrProc.Connection = dbConn; sqlStrProc.CommandText = "dbo.insert_test"; sqlStrProc.CommandType = Command

我尝试实现对存储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。我做错了什么。请帮忙。。!! 下面是存储的过程代码

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

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

-1返回值是在执行SP过程中产生的错误,这是由于以下原因造成的:

SP结构:每次执行SP时,它都会在SP已存在时再次尝试创建它。因此,您必须将其设置为ALTER过程而不是CREATE过程,或者执行以下操作:

如果存在,请从sys.objects中选择*,其中object_id=object_IDN'[dbo].[INSERT_TEST]'并键入N'p',N'PC' 丢弃程序[dbo]。[插入测试] 去

创建过程[dbo]。[插入测试] @p_TestID int输出, @p_TestName varchar 50, @p_由varchar 100创建 作为

数据库连接表名称和位置:必须使用OLEDB指定连接到写数据库的ConnectionString。尝试测试完整的表路径;如下所示

插入到[DATABASENAME].[SHCEMA].[TABELNAME] 名称 创造的 价值观 @p_TestName, @p_由

将您的SP定义为:

创建过程[名称]

作为 开始 结束

虽然这不是问题,但这是在连接事务方面编写SP的正确方法

让我知道它是否适合您:

抱歉,
S.ANDOURA

SP是否真的按预期插入了记录?要了解一些情况并学习一些新知识,请按照此处的说明观察正在运行的存储过程。您应该能够验证您的代码是否发送了正确的参数,以及您的存储过程是否正确执行。1.正在调用dbo.INSERT\u测试。这里描述的CREATE/ALTER问题与返回值无关。2.是的,这可以修复错误3。这是误导。“开始-结束”与代码块有关,与“连接事务”无关。您这里指的是事务吗?也许你对BEGIN-TRANHey@ElectricLlama感到困惑,我非常感谢你的反馈,谢谢,这篇文章将被编辑。关于你所说的,是的,第二点是解决方案。