我有一個的投擲一個代碼行的ORA-00911:在C#中無效字符,而不是Oracle SQL Developer中
甲骨文例外 - ORA-00911:
當試圖無效字符以下C#代碼:
double tempDateTimeObj = Convert.ToDouble(someClass.GetTime(tempObjID, objStartTime, todayTime).Rows[0][0]);
GETTIME是一個函數,使一個SQL調用發生在你上面看到的變量,SQL調用出入庫Oracle數字類型,然後GETTIME C#福nction每次返回一行的DataTableCollection Tables
對象。
public static DataTable GetTime(string tempObjID, DateTime objStartTime, DateTime todayTime)
{
string sql = "select some_pkg.get_time('" + tempObjID + "', to_date('" + objStartTime + "', 'mm/dd/yyyy hh:mi:ss am'), to_date('" + todayTime + "', 'mm/dd/yyyy hh:mi:ss am')) from dual;";
return <connection object>.getDS(sql).Tables[0];
}
如果我調試,搶有變量的值的SQL字符串,並將其扔進的Oracle SQL Developer,它工作得很好,並返回在SQL開發控制檯的數字。但是,當我調試並遇到該行時,C#代碼會拋出00911異常。由於字符串sql已經在Oracle SQL Dev中測試過,所以語法應該是有效的。給定有效的語法,VS2010爲什麼會拋出這個錯誤/異常?
編輯: 這裏是什麼正在建在C#併發送至數據庫對象的樣本串:
select some_pkg.get_time('23569245', to_date('11/8/2012 1:21:06 PM', 'mm/dd/yyyy hh:mi:ss am'), to_date('12/31/2012 12:52:18 AM', 'mm/dd/yyyy hh:mi:ss am')) from dual
有一個分號,並在C#中的字符串沒有分號已嘗試並導致相同的Oracle異常,儘管它們都在Oracle SQL中工作Dev
'Kurt'爲什麼不創建存儲過程並使用參數化查詢 – MethodMan
「存儲過程的主要目的是構建要加載到臨時表中的中間結果,然後在SELECT語句中查詢該臨時表。 ...可以使用表值函數來編寫EXEC語句。「 http://msdn.microsoft.com/en-us/library/ms187650.aspx 由於函數不使用中間結果,所以最好作爲函數而不是存儲過程。 –