2012-06-14 71 views
1

我正在尋找一種方式在C#中傳遞Informix列表參數。如何通過ODBC連接在C#中傳遞Informix集合參數(LIST,SET,MULTISET)

我問過一個關於如何將多值參數傳遞給Informix的問題,但現在我需要從C#中執行它。

相關問題是here

在簡歷中我有一個像這樣的過程。

它的Aqua Data Studio.8.0.22執行像這樣

EXECUTE PROCEDURE test_3('LIST{''stspols'',''stsrepo''}'); 

工作正常,所以我做了如何在C#中執行它的一個簡單的例子。

首先像CommandType.Text

string strParameters = "LIST{''stspols'',''stsrepo''}"; 
using (OdbcConnection oConnection = new OdbcConnection("DSN=MYDSN;UID=MYUID;PWD=MYPWD;")) 
     { 
      oConnection.Open(); 
      using (OdbcDataAdapter oCommand = new OdbcDataAdapter(string.Format("EXECUTE PROCEDURE test_3('{0}')", strParameters), oConnection)) 
      {     
       using (DataTable dt = new DataTable()) 
       { 
          oCommand.Fill(dt); 
       } 

      } 
     } 

這一個工作正常。

所以我就courious並試圖執行它,但作爲CommandType.StoredProcedure

string strParameters = "LIST{''stspols'',''stsrepo''}"; 
      using (OdbcConnection oConnection = new OdbcConnection("DSN=MYDSN;UID=MYUID;PWD=MYPWD;")) 
      { 
       oConnection.Open(); 
       using (OdbcCommand oCommand = new OdbcCommand("{CALL test_3(?)}", oConnection)) 
       { 
        oCommand.CommandType = CommandType.StoredProcedure; 
        OdbcParameter oParameter = new OdbcParameter("c", OdbcType.Char, 4000); 
        oParameter.Value = strParameters; 
        oCommand.Parameters.Add(oParameter); 

        using (OdbcDataAdapter oDataAdapter = new OdbcDataAdapter(oCommand)) 
        { 
         using (DataTable dt = new DataTable()) 
         { 
          oDataAdapter.Fill(dt); 
         } 

        } 
       } 

      } 

但現在我得到ERROR [HY000] [Informix][Informix ODBC Driver][Informix]Invalid collection literal value.

所以經過這一切,我的最後一個問題是

我怎樣才能從C#執行這種Informix過程,使用Collection參數Type(LIST,SET,MULTISET)作爲存儲過程。

顯然我做錯了什麼。

在此先感謝您的寶貴幫助。

回答

1

原始SQL中需要加倍的單引號,但不應在參數化查詢中需要。你應該能夠取代:

string strParameters = "LIST{''stspols'',''stsrepo''}"; 

有:

string strParameters = "LIST{'stspols','stsrepo'}"; 

理解當報價需要加倍當他們這樣做不是很棘手,但「不是佔位符值」是準確的。

+0

你又是對的!再次感謝@Jonathan –