【发布时间】:2011-10-17 03:17:21
【问题描述】:
这是我的 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();
}
【问题讨论】:
-
你能告诉你如何设置参数吗?它们是什么数据类型
-
通常当您遇到此类错误时,这意味着查询编译器预期在特定点有一个右括号,但发现了其他东西。这可能并不意味着有 no 右括号(尤其是在这种情况下肯定有)。查询编译器还没有到达那里。
-
你为什么还需要它们?这只是一个连接。
-
我建议删除你的括号,看看它是如何运行的。我不确定 Oracle,但在大多数 T-SQL DBMS 中,它会在结果行集的括号之后需要某种别名。
-
gnb,我对原始帖子进行了编辑,并添加了您想要查看的信息。谢谢!