2014-10-01 2 views
0

Когда я называю SSISDB catalog.set_execution_parameter_value хранимой процедуру для задания параметров для выполнения моего проекта, он взрывает на булевом параметр сВызова catalog.set_execution_parameter_value из C# с логическим параметром

типа данных от входного значения не совместим с типом данных из «Boolean»

Я попытался использовать строку и объект с «ложной» или значение «1». Есть ли способ передать boolean для этого proc из C#?

enter image description here

РЕШЕНИЕ:

 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(); 
+0

Какой тип ParamValue? Я ожидал бы, что 0 или 1 будут работать с SQL, потому что это будет выглядеть t-sql. Может быть, изменить это на int? –

+0

Сохраненный proc ожидает sql_variant. В C# я попытался установить ParamValue на строку и объект. Он не может быть int, поскольку некоторые параметры являются строками. – Metaphor

ответ

1

С чисто 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 может быть сложно, как он пытается сделать вывод, правильный тип данных, и иногда это происходит не так хорошо. Существует informative chart с указанием типов данных параметров в MSDN. Если вы переработаете свой C#, чтобы явно установить тип данных, а затем присвоить значение, устраняет ли это проблему?

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

Спасибо! У меня были слепые с AddWithValue. Он все еще не распознает логическое значение, но базовое значение - это строка. Я думаю, что мне нужно сделать, это тип хранилища с параметрами и указать значение при настройке варианта. – Metaphor

+0

В дополнение к usiong Add вместо AddWithValue мне нужно было указать тип параметра и произнести при настройке Variant. – Metaphor

+0

Отлично. Я просто пытался копировать ваш код и понял, что вы используете [SQLClient] (http://msdn.microsoft.com/en-us/library/System.Data.SqlClient (v = vs.110) .aspx), тогда как Я собирался с OLE в приведенном выше – billinkc

Смежные вопросы