2011-02-14 99 views
2

我試圖調用一個返回XMLType數據的Oracle存儲過程,但我收到的是一個'沒有數據發現異常'。表中有數據。我已經檢查過,然後再次檢查。 我的代碼中存在調用存儲過程的錯誤。也許一些明顯的事情,我完全失蹤了。調用Oracle存儲過程。獲取「未找到數據」異常

using (OracleConnection dbc = new OracleConnection("Data Source=test; User ID=user; Password=pwd")) 
{ 
    dbc.Open(); 
    using (DbTransaction trans = dbc.BeginTransaction()) 
    { 
     try 
     { 
     DbCommand comm = dbc.CreateCommand(); 
     comm.CommandType = CommandType.StoredProcedure; 
     comm.CommandText = "TestStoredProcedure"; 
     comm.Transaction = trans; 

     OracleParameter returnParam = new OracleParameter("result", OracleDbType.XmlType); 
     returnParam.Direction = ParameterDirection.ReturnValue; 
     comm.Parameters.Add(returnParam); 

     OracleParameter param1 = new OracleParameter("param1", OracleDbType.Varchar2); 
     param1.Direction = ParameterDirection.Input; 
     param1.Size = 70; 
     param1.Value = "testing"; 
     comm.Parameters.Add(param1); 

     OracleParameter param2 = new OracleParameter("param2", OracleDbType.Varchar2); 
     param1.Direction = ParameterDirection.Input; 
     param1.Size = 70; 
     param1.Value = "testing"; 
     comm.Parameters.Add(param2); 

     OracleParameter param3 = new OracleParameter("param3", OracleDbType.Date); 
     param1.Direction = ParameterDirection.Input; 
     param1.Value = Convert.ToDateTime("1/18/2011 12:00:00 AM"); 
     comm.Parameters.Add(param3); 

     comm.ExecuteNonQuery(); //exception at this line 

     OracleXmlType oracleXml = (OracleXmlType)comm.Parameters["result"].Value; 
     XmlDocument xmlDoc = oracleXml.GetXmlDocument(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.ToString()); 
     } 
    } 
} 

存儲過程:

declare 
    -- Non-scalar parameters require additional processing 
    result sys.xmltype; 
begin 
    -- Call the function 
    result := mktadmin.test_package.test(param1 => :testval1, 
             param2 => :testval2, 
             param3 => :testval3); 
end; 

編輯:忽略名稱的差異。我不得不編輯它們在這裏發佈。

+2

什麼是mktadmin.test_package.test的代碼?克勞斯是正確的,通常是選擇一個不返回行的變量。 – tbone 2011-02-14 18:18:05

回答

3

看起來您正在覆蓋param2和param3部分分配中的param1屬性。

+0

是的,您是對的。我無法相信我那是我做錯了什麼。謝謝。 – xbonez 2011-02-15 14:23:59

3

查看存儲過程將很有用。執行select into時,您通常會得到no data found錯誤,但得不到結果。

+0

在存儲的rpoc後面添加了代碼 – xbonez 2011-02-14 18:05:51