2

当我调用 SSISDB catalog.set_execution_parameter_value 存储过程来设置执行我的项目的参数时,它会在布尔参数上爆炸

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

我尝试使用具有“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();
4

1 回答 1

3

从纯 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;
于 2014-10-01T19:55:33.480 回答