2012-11-05 70 views
4

我正嘗試使用比它使用的參數更多的參數來提供sqlcommand。正因爲如此,我得到異常ORA 01036.說明導致我只能傳遞將在查詢中實際使用的參數。使用Oracle客戶端的可選sql命令參數

我找不到它 - 是否真的如此?看來非常愚蠢的和有限的,我...

+0

你爲什麼要傳遞的參數? – GolfWolf

+0

@ w0lf,從我頭頂開始 - 因爲我有一個泛型參數基類?或者有很多參數我不想每次手動準備。它適用於Postgres和SqlServer ... – IamDeveloper

+1

@IAmDeveloper哇,我從來沒有意識到,直到現在。剛剛在SQL Server中進行檢查,它*可以工作。 – GolfWolf

回答

1
  1. 我試圖用System.Data.SqlClient.SqlConnection連接到Oracle數據庫重新創建你的情況和不成功。

  2. 使用System.Data.OracleClient.OracleConnection我能夠測試有和沒有參數的查詢。下面的代碼在未註釋的'string sql ...'下成功。評論過的'string sql'會遇到與你的問題中提到的相同的錯誤。

    StringBuilder sb = new StringBuilder(); 
    
        string sql = "SELECT CASE_ID, CLAIM_NR, CLAIM_PHS_CD FROM TABLENAME WHERE CASE_ID = :ci"; 
        //string sql = "SELECT CASE_ID, CLAIM_NR, CLAIM_PHS_CD FROM TABLENAME"; 
    
        using (OracleConnection connection = new OracleConnection (RegistryConnectionInformation.GetDBConnString())) 
        { 
         OracleParameter ci = new OracleParameter(); 
         ci.ParameterName = "ci"; 
         ci.Value = "12345"; 
    
         OracleCommand command = new OracleCommand (sql, connection); 
         command.Parameters.Add (ci); 
    
         connection.Open(); 
         OracleDataReader reader = command.ExecuteReader(); 
    
         try 
         { 
          while (reader.Read()) 
          { 
           sb.Append (string.Format ("{0} - {1} - {2}\n", reader [ 0 ], reader [ 1 ], reader [ 2 ])); 
          } 
         } 
         catch (Exception ex) 
         { 
          sb.Append (string.Format ("{0}\n\n{1}", ex.Message, ex.StackTrace)); 
         } 
         finally 
         { 
          reader.Close(); 
         } 
        } 
    
        return sb.ToString(); 
    
  3. 這使我相信你是正確的:查詢甲骨文,在命令必須通過在查詢PARAMATERS的數量相匹配PARAMATERS數時。

    a。在使用Oracle時,我還建議您保持參數的順序與查詢中的使用順序相同。根據您使用的DLL,參數不基於參數名稱映射,而是按插入順序映射。

戴夫