使用布尔参数从c#调用catalog.set_execution_参数_值

使用布尔参数从c#调用catalog.set_execution_参数_值,c#,sql-server,ssis,ssis-2012,C#,Sql Server,Ssis,Ssis 2012,当我调用SSISDB catalog.set_execution_parameter_value storaged proc来设置项目执行的参数时,它会在一个布尔参数上爆炸,带有 输入值的数据类型与数据类型不兼容 “布尔”的定义 我尝试使用字符串和值为“False”或“1”的对象。有没有办法从c#向该进程传递布尔值 解决方案: SqlCommand cmd = new SqlCommand("catalog.set_execution_parameter_value", con

当我调用SSISDB catalog.set_execution_parameter_value storaged proc来设置项目执行的参数时,它会在一个布尔参数上爆炸,带有

输入值的数据类型与数据类型不兼容 “布尔”的定义

我尝试使用字符串和值为“False”或“1”的对象。有没有办法从c#向该进程传递布尔值

解决方案:

        SqlCommand cmd = new SqlCommand("catalog.set_execution_parameter_value", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@execution_id", this.ExecutionID);
        cmd.Parameters.AddWithValue("@object_type", ParamReference);
        cmd.Parameters.AddWithValue("@parameter_name", ParamName);
        SqlParameter p = cmd.Parameters.Add("@parameter_value", SqlDbType.Variant);
        switch (ParamType) 
        {
            case "String" :
                p.Value = ParamValue;
                break;
            case "Int32" :
                p.Value = Int32.Parse(ParamValue);
                break;
            case "Int64" :
                p.Value = Int64.Parse(ParamValue);
                break;
            case "Boolean" :
                p.Value = bool.Parse(ParamValue);
                break;
        }

        cmd.ExecuteNonQuery();

从纯TSQL的角度来看,设置包参数的机制如下

DECLARE @var0 bit = 0;
EXEC [SSISDB].[catalog].[set_execution_parameter_value]
    @execution_id
,   @object_type = 30
,   @parameter_name = N'GoFast'
,   @parameter_value = @var0;
AddWithValue可能很棘手,因为它试图推断出正确的数据类型,但有时并不顺利。在MSDN上指定参数数据类型时存在一个问题。如果重新编写C#以显式设置数据类型,然后分配一个值,那么这是否解决了问题

OleDbParameter parameter = cmd.Parameters.Add("@parameter_value", OleDbType.Variant);
parameter.Value = ParamValue;

ParamValue是什么类型的?我希望0或1与SQL一起工作,因为t-SQL就是这样的。可能会将其更改为int?存储的进程需要一个sql_变量。在c#中,我尝试将ParamValue设置为string和object。它不能是int,因为某些参数是字符串。谢谢!我戴上了AddWithValue的眼罩。但它仍然无法识别布尔值,基础值是字符串。我想我需要做的是使用参数存储类型,并在设置变量时强制转换值。除了使用Add而不是AddWithValue外,我还必须指定参数类型,并在设置变量时强制转换。完美。我只是试图复制您的代码,并意识到您使用的是OLE,而我在上面使用的是OLE