2013-02-26 21 views
1

我試圖編寫一個準備語句來檢索使用SqlDataSource的數據,但似乎無法編寫一個好的SelectCommand語句(下​​面第7行)來執行此操作。有人可以請說明如何做到這一點?使用SqlDataSource和C#prepared語句檢索Oracle數據

OracleCommand cm = new OracleCommand(); 
cm.CommandText = "SELECT FTPOSCODE FROM PPTBL WHERE DESC LIKE '%" + "@parm1" + "%"; 
cm.Parameters.Add("@parm1", "ACCOUNT"); 
OracleConnection cn = new OracleConnection(); 
cn.ConnectionString = ConfigurationManager.ConnectionStrings["ORCLConnectionString"].ConnectionString; 
cn.Open(); 
SqlDataSource1.SelectCommand = cm.ToString(); // "ORA-00900: invalid SQL statement" 
cn.Close(); 

上面進行了簡化。 Slawomir和我繼續聊天,並提出以下工作代碼。謝謝Slawomir!

using (OracleConnection cn = new OracleConnection(ConfigurationManager.ConnectionStrings["ORCLConnectionString"].ConnectionString)) { 
    SqlDataSource1.SelectCommand = "SELECT FTPOSCODE, PTPOSCODE, POSCLASSTITLE, FKSA, JOBCAT, PAYGRADE, HRPAYRANGE, MONTHPAYRANGE FROM HR_PAY_PLAN WHERE UPPER(POSDESC) LIKE :1 OR UPPER(POSCLASSTITLE) LIKE :2 ORDER BY POSCLASSTITLE"; 
    SqlDataSource1.SelectParameters.Add(":1", "%" + key1 + "%"); 
    SqlDataSource1.SelectParameters.Add(":2", "%" + key1 + "%"); 
} 

回答

4

在Oracle中,您應該使用:parm1而不是@parm1。另外,您應該在參數值中添加百分號。你也不需要創建命令和連接,因爲它將由SqlDataSource1創建。

SqlDataSource1.SelectCommand = "SELECT FTPOSCODE FROM PPTBL WHERE DESC LIKE :parm1"; 
SqlDataSource1.SelectParameters.Add(":parm1", "%ACCOUNT%"); 
+0

感謝您的糾正,仍然看到錯誤。 – DavidC 2013-02-26 18:52:06

+0

你有同樣的錯誤嗎?我想知道是否真的有名爲DESC的列,因爲它是爲關鍵字保留的 – 2013-02-26 19:03:28

+0

我試圖發佈代碼的簡化版本,對不起。我將現在的實際代碼添加到原始問題中。是的,這是「無效的SQL」錯誤。 – DavidC 2013-02-26 19:07:30

相關問題