使用布尔参数从c#调用catalog.set_execution_参数_值
当我调用SSISDB catalog.set_execution_parameter_value storaged proc来设置项目执行的参数时,它会在一个布尔参数上爆炸,带有 输入值的数据类型与数据类型不兼容 “布尔”的定义 我尝试使用字符串和值为“False”或“1”的对象。有没有办法从c#向该进程传递布尔值 解决方案:使用布尔参数从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
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