加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 错误在我的SQL语句中说“缺少右括号”……但事实并非如此

发布时间:2020-12-16 01:46:06 所属栏目:百科 来源:网络整理
导读:这是我在C#程序中的陈述: (由gbn编辑,格式清晰,所以不是全部在一行) 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
这是我在C#程序中的陈述:

(由gbn编辑,格式清晰,所以不是全部在一行)

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'";

这是错误消息:

ERROR [HY000] [Oracle][ODBC][Ora]ORA-00907: missing right parenthesis

我的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,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",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();

    }

解决方法

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

见http://download.oracle.com/docs/cd/B19306_01/em.102/b40103/app_oracle_reserved_words.htm

根据您的数据库提供程序,您可能希望使用:而不是@表示params.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读