Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在我的SQL语句中显示“缺少右括号”时出错。。。但事实并非如此!帮助_C#_Sql_Oracle - Fatal编程技术网

C# 在我的SQL语句中显示“缺少右括号”时出错。。。但事实并非如此!帮助

C# 在我的SQL语句中显示“缺少右括号”时出错。。。但事实并非如此!帮助,c#,sql,oracle,C#,Sql,Oracle,以下是我在C程序中的声明: 按gbn编辑,为清晰起见进行格式化,因此并非所有内容都在一行中 DbCommand.CommandText = @"SELECT HIST.MBRSEP, HIST.LOCATION, HIST.BILLTYPE, HIST.BILLMOYR, LOCINFO.CYCLE, LOCINFO.DIST, LOCINFO.LOCATION FROM (CAV_MBRHISTDEL AS HIST

以下是我在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'";
下面是我将它们添加到DbCommand的地方:

        DbCommand.Parameters.AddWithValue("@CYCLE", cycle);
        DbCommand.Parameters.AddWithValue("@DISTRICT", district);
以下是当有人单击我表单上的“Go”按钮时触发的完整代码:

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();

    }

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

您缺少内部查询中的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

问题可能是您正在使用oracle保留字作为列名和参数名-即循环。。。 这样做可能会导致DB出现奇怪和不稳定的行为


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

您可以演示如何设置参数吗?当您遇到这种错误时,它们通常是什么数据类型,这意味着查询编译器希望在某个特定点上有一个右括号,而找到了其他的数据类型。这可能并不意味着没有右括号,尤其是在这种情况下,肯定有右括号。查询编译器还没有到那里。你为什么还需要它们呢?这只是一个连接。我建议去掉括号,看看它是如何运行的。我对Oracle不太清楚,但在大多数T-SQL DBMS中,它会在生成的row-set的参数后使用某种别名。gnb,我对我的原始帖子进行了编辑,并添加了您希望看到的信息。谢谢实际上,我删除了括号,并收到一条错误消息说ORA-00933:SQL命令没有正确结束。然后继续。试着放一个盒子;在陈述的结尾。不过,这只是一个猜测:我更喜欢sql server。我尝试了一下,得到了关于未正确结束的相同消息:错误[HY000][Oracle][ODBC][Ora]Ora-00933:sql命令未正确结束。真奇怪!您还需要删除表别名的AS。@jonearles:我会将您的评论作为答案发布,因为它与Joel的建议不同,我认为这可能是这里真正的问题。啊,是的,这可能会引起问题!我将SELECT添加到内部查询并尝试运行该程序。我收到了另一条错误消息,但至少是不同的。当我尝试填充数据表dt时,它会出错并显示ORA-00903:无效的表名。嗯,我双重验证了我的表名是正确的,所以我不确定为什么会有错误消息说表名无效。wtf?为什么要投否决票??顺便说一句,你可能需要给你的内心选择一个别名-试试这个:…ON HIST.LOCATION=LOCINFO.LOCATION XIt不是我投了你的反对票。嘿,我在寻找我能得到的一切帮助!我将尝试为内部select提供一个别名,看看会发生什么。我感谢你的帮助!嗯。我想知道这是否是问题的一部分,保留关键字“循环”的使用?是的,这是最后一个让一切正常工作的部分。我非常感谢你的帮助,Yahia,以及所有其他人的帮助。
FROM 
    (CAV_MBRHISTDEL ... -- Missing SELECT