2014-10-01 68 views
0

當我打電話SSISDB catalog.set_execution_parameter_value存儲過程設置爲我的項目的執行參數,它炸燬了與調用從C#catalog.set_execution_parameter_value用布爾參數

的數據類型的布爾參數輸入值的不與數據類型的「布爾」

我使用字符串和對象,具有「假」或「1」值試圖兼容。有沒有辦法將一個布爾值從c#傳遞給這個過程?

enter image description here

SOLUTION:

 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? – 2014-10-01 18:28:42

+0

存儲的proc需要sql_variant。在C#中,我嘗試將ParamValue設置爲字符串和對象。它不能是int,因爲一些參數是字符串。 – Metaphor 2014-10-01 18:43:49

回答

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 2014-10-02 13:29:01

+0

除了使用添加而不是AddWithValue,我必須指定參數類型並在設置變體時進行強制轉換。 – Metaphor 2014-10-02 14:12:45

+0

完美。我只是想複製你的代碼,並意識到你正在使用[SQLClient](http://msdn.microsoft.com/en-us/library/System.Data.SqlClient(v = vs.110).aspx),而我正在與OLE在上面 – billinkc 2014-10-02 14:14:37