使用SqlDataSource和C#prepared语句检索Oracle数据

时间:2013-02-26 18:20:34

标签: c# oracle prepared-statement sqldatasource

我正在尝试编写一个用于使用SqlDataSource检索数据的预准备语句,但似乎无法组成一个好的SelectCommand语句(下​​面的第7行)来执行此操作。有人可以说明如何做到这一点?

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 + "%");
}

1 个答案:

答案 0 :(得分:4)

在Oracle中,您应该使用:parm1而不是@parm1。此外,您应该在参数值中添加百分号。此外,您不需要创建命令和连接,因为它将由SqlDataSource1创建。

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