我知道這個問題已被問到before,但這些解決方案似乎不適用於我。在C#中創建並編譯「on the fly」存儲過程Net
我目前正試圖做到這一點:
- 建立甲骨文
- 使用企業庫5.0創建一個SQL命令「CREATE PROCEDURE」腳本字符串,並通過這個字符串作爲參數
- 有無保存在oracle數據庫中的程序
因此,第3點似乎工作到目前爲止,如果我打開SQL Developer並展開過程樹列表,那麼我實際上可以看到過程bu t與紅十字圈,這意味着它有編譯器錯誤,雖然運行這個相當小的代碼,在SQL Developer查詢窗口中工作正常並編譯它。我不確定在SQL Developer中做了些什麼,因爲運行該「CREATE PROCEDURE」腳本不會引發任何錯誤,然後我就可以看到並執行該過程,但不會從C#中完成。
我讀到在這個開始發佈的鏈接中,我應該調用IDBCommand.Prepare()
,但該方法只與您的SQLCommand.CommandType是StoredProcedure類型有關,因爲我沒有實際調用過程,而是運行純sql爲了創建程序,這不起作用,但是,爲了測試,我創建了一個新的命令,我將其分配給StoredProcedure,然後在該命令上調用Prepare()方法,最後是拋出一個除非對象(存儲過程)不可用,這是合理的,因爲它尚未編譯...
所以,我想知道是否有人真的知道如何創建一個過程並從C#編譯它,我們是當前的儘管使用企業庫,但我不介意直接向Oracle提供者「硬編碼」,只要它能夠工作。
順便說一句,在告訴我從代碼創建一個過程是一個不好的做法我告訴你,不幸這是一個客戶的項目,我們沒有做出決定,實際上我們試圖從SQL Server遷移事情到Oracle。
那麼,事實證明,由於某些原因,有回車字符(CR)或新行,如果你願意,在具有CREATE PROCEDURE命令的字符串導致這個問題,所以,不知何故,這是由oracle解釋錯誤地,誰知道什麼原因。無論如何,我「有點」通過做一個mySqlStr.Replace(System.Environment.NewLine,string.Empty)來解決它,這樣該命令進入一個單行,由10g Express正確解析。 – 2011-05-17 22:38:47