错误在我的SQL语句中说“缺少右括号”......但事实并非如此!救命?

时间:2011-08-01 01:44:45

标签: c# sql oracle

这是我在C#计划中的陈述:

(由gbn编辑,格式清晰,所以 all 在一行上)

DbCommand.CommandText =
             @"SELECT 
      HIST.MBRSEP, HIST.LOCATION, HIST.BILLTYPE, HIST.BILLMOYR, LOCINFO.CYCLE, 
      LOCINFO.DIST, LOCINFO.LOCATION
    FROM 
      (CAV_MBRHISTDEL AS HIST INNER JOIN CAV_LOCINFODETL AS LOCINFO ON HIST.LOCATION = LOCINFO.LOCATION)
    WHERE
       LOCINFO.CYCLE = @CYCLE AND 
       LOCINFO.DIST = @DISTRICT AND 
       HIST.BILLTYPE = '09' AND 
       HIST.BILLMOYR <> '9999'";

以下是错误消息:

  

错误[HY000] [Oracle] [ODBC] [Ora] ORA-00907:缺少右括号

我的SQL语句中只有两个括号,一个是右边的,一个是左边的。我不确定错误告诉我的是什么。有什么建议吗?

编辑:以下是参数的定义方式:

        string cycle = cbCycle.Text;
        string district = cbDistrict.Text.Substring(0,2);

这是我将它们添加到DbCommand的地方:

        DbCommand.Parameters.AddWithValue("@CYCLE", cycle);
        DbCommand.Parameters.AddWithValue("@DISTRICT", district);

这是我的完整代码,当有人点击表单上的“转到”按钮时会触发该代码:

private void btnGo_Click(object sender, EventArgs e)
    {
        //get parameters
        string cycle = cbCycle.Text;
        string district = cbDistrict.Text.Substring(0,2);

        //create a connection to the database
        OdbcConnection DbConnection = new OdbcConnection("DSN=UPN2;uid=xxx;pwd=xxxx");
        DbConnection.Open();

        //create a command to extract the required data and
        //assign it to the connection string
        OdbcCommand DbCommand = DbConnection.CreateCommand();
        DbCommand.CommandText =
             @"SELECT HIST.MBRSEP, HIST.LOCATION, HIST.BILLTYPE, HIST.BILLMOYR, LOCINFO.CYCLE, LOCINFO.DIST, LOCINFO.LOCATION FROM CAV_MBRHISTDEL AS HIST INNER JOIN CAV_LOCINFODETL AS LOCINFO ON HIST.LOCATION = LOCINFO.LOCATION WHERE LOCINFO.CYCLE = @CYCLE AND LOCINFO.DIST = @DISTRICT AND HIST.BILLTYPE = '09' AND HIST.BILLMOYR <> '9999'; ";

        DbCommand.Parameters.AddWithValue("@CYCLE", cycle);
        DbCommand.Parameters.AddWithValue("@DISTRICT", district);

        //Create a DataAdapter to run the command and fill the datatable
        OdbcDataAdapter da = new OdbcDataAdapter();
        da.SelectCommand = DbCommand;
        DataTable dt = new DataTable();
        da.Fill(dt);


        tbOutput.Text = PrintDataTable(dt);

        DbCommand.Dispose();
        DbConnection.Close();

    }

3 个答案:

答案 0 :(得分:3)

尝试删除您拥有的括号:您不需要它们。

答案 1 :(得分:3)

问题可能是您使用oracle保留字作为列名和param名称 - 即CYCLE ... 这样做可能会导致DB的奇怪和不稳定的行为!

请参阅http://download.oracle.com/docs/cd/B19306_01/em.102/b40103/app_oracle_reserved_words.htm

根据您的数据库提供程序的不同,您可能希望使用:代替@来获取参数。

答案 2 :(得分:1)

您错过了内部查询中的SELECT。试试这个:

...
FROM 
    (SELECT CAV_MBRHISTDEL AS HIST -- Added SELECT
    INNER JOIN CAV_LOCINFODETL AS LOCINFO ON HIST.LOCATION = LOCINFO.LOCATION)
WHERE
...

你有:

FROM 
    (CAV_MBRHISTDEL ... -- Missing SELECT