【问题标题】:Retrieving Oracle data using a SqlDataSource and a C# prepared statement使用 SqlDataSource 和 C# 准备语句检索 Oracle 数据
【发布时间】:2013-02-26 18:20:34
【问题描述】:

我正在尝试编写用于使用 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 和我继续聊天并想出了以下工作代码。谢谢斯拉沃米尔!

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

【问题讨论】:

    标签: c# oracle prepared-statement sqldatasource


    【解决方案1】:

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

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

    【讨论】:

    • 你有同样的错误吗?我想知道您是否真的有名为 DESC 的列,因为它是为关键字保留的
    • 我试图发布代码的简化版本,对不起。我将我现在拥有的实际代码添加到原始问题中。是的,就是“invalid SQL”错误。
    • 您还应该删除查询中围绕参数的撇号 (')
    • 这就是我现在所拥有的,仍然收到错误消息:“SELECT FTPOSCODE, PTPOSCODE, POSCLASSTITLE, FKSA, JOBCAT, PAYGRADE, HRPAYRANGE, MONTHPAYRANGE FROM HR_PAY_PLAN WHERE UPPER(POSDESC) LIKE :parm1 OR UPPER( POSCLASSTITLE) LIKE :parm2 ORDER BY POSCLASSTITLE"
    • 尝试将连接分配给命令并使用 cm.ExecuteReader 而不是分配 cm.ToString()
    猜你喜欢
    • 2012-03-13
    • 1970-01-01
    • 2013-07-16
    • 2020-09-09
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多