【问题标题】:missing expressing in oracle query through odbc command通过 odbc 命令在 oracle 查询中缺少表达
【发布时间】:2015-08-28 14:02:08
【问题描述】:

我使用 oracle 数据库作为后端。当我在 asp.net c# 中运行以下脚本时,出现以下错误

sql = "SELECT * FROM STUDENT WHERE YEAR = @YEARS AND SEMESTER = @SEMESTER";
 OdbcCommand cmd = new OdbcCommand(sql, connection);
                cmd.Parameters.AddWithValue("@YEARS", 2010);
                cmd.Parameters.AddWithValue("@SEMESTER", 2);
                OdbcDataAdapter da = new OdbcDataAdapter(cmd);
                DataTable dtf = new DataTable();
                da.Fill(dtf);

当我运行这个脚本时,我得到了以下错误

ERROR [42000] [Microsoft][ODBC driver for Oracle][Oracle]ORA-00936:缺少表达式

上面的代码有什么问题。

【问题讨论】:

    标签: c# asp.net oracle odbc


    【解决方案1】:

    YEARODBC 中的保留字,请尝试将其括在方括号[] 内。

    ODBC Reserved Words

    试试这个:

    sql = "SELECT * FROM STUDENT WHERE [YEAR] = @YEAR AND SEMESTER = @SEMESTER";
    OdbcCommand cmd = new OdbcCommand(sql, connection);
                cmd.Parameters.AddWithValue("@YEAR", 2010);
                cmd.Parameters.AddWithValue("@SEMESTER", 2);
                OdbcDataAdapter da = new OdbcDataAdapter(cmd);
                DataTable dtf = new DataTable();
                da.Fill(dtf);
    

    【讨论】:

    • 好的,我更改了参数名称年,但仍然出现错误
    【解决方案2】:

    删除查询中的@。在 Oracle 中,绑定变量就像 :BIND_VARIABLE 使用冒号(:)

    sql = "SELECT * FROM STUDENT WHERE YEAR = :YEAR AND SEMESTER = :SEMESTER";
     OdbcCommand cmd = new OdbcCommand(sql, connection);
                    cmd.Parameters.AddWithValue("YEAR", 2010);
                    cmd.Parameters.AddWithValue("SEMESTER", 2);
                    OdbcDataAdapter da = new OdbcDataAdapter(cmd);
                    DataTable dtf = new DataTable();
                    da.Fill(dtf);
    

    【讨论】:

    • 我收到错误这个错误不是所有变量都绑定所有变量
    • 添加cmd.BindByName = true;
    • 错误 1“System.Data.Odbc.OdbcCommand”不包含“BindByName”的定义,并且没有扩展方法“BindByName”接受“System.Data.Odbc.OdbcCommand”类型的第一个参数可以找到(您是否缺少 using 指令或程序集引用?)
    • 我在输入 cmd.BindByName = true 时出错;
    • 这个previous question 可能有助于解决您遇到的新错误。
    【解决方案3】:

    也许您可以尝试使用“?”

        sql = "SELECT * FROM STUDENT WHERE YEAR = ? AND SEMESTER = ?";
               OdbcCommand cmd = new OdbcCommand(sql, connection);
               cmd.Parameters.AddWithValue("?", 2010);
               cmd.Parameters.AddWithValue("whatever", 2); 
               OdbcDataAdapter da = new OdbcDataAdapter(cmd);
               DataTable dtf = new DataTable();
               da.Fill(dtf);
    

    you can look this

    我试过了

        sql = "SELECT * FROM STUDENT WHERE YEAR = :YEAR AND SEMESTER = :SEMESTER";
        OdbcCommand cmd = new OdbcCommand(sql, connection);
        cmd.Parameters.AddWithValue(":YEAR", 2010);
        //
    

    没用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      相关资源
      最近更新 更多