【发布时间】:2012-03-06 00:55:35
【问题描述】:
我收到一个 oracle 00911 错误(非法字符)。我希望有人能帮助我理解。
我正在使用以下代码在我的 oracle 11g 数据库上执行 sql 语句:
private DataTable ExecuteQuery(DbCommand query) {
DataTable result = new DataTable();
using (DbConnection con = CreateConnection()) {
try {
query.Connection = con;
query.CommandTimeout = int.MaxValue; // don't impose a timeout
using (DbDataAdapter dataAdapter = factory.CreateDataAdapter()) {
dataAdapter.SelectCommand = query;
dataAdapter.Fill(result);
}
}
...
如果我给这个函数一个带有DbCommand.CommandText 属性的东西,比如"Select * from X;",它可以正常工作,但是给定"Select * from x where y;",这将引发oracle 00911 异常。但是,如果我删除分号,它会执行得很好。
有谁知道为什么只在某些类型的语句上用分号结束语句会引发非法字符错误?
为清晰起见更新:
我用来测试导致错误的分号的确切查询是:
这个查询运行良好:
SELECT * FROM Machines;
此查询生成 ORA 0911 错误:
SELECT * FROM Machines WHERE ID = 47;
虽然此查询运行良好:
SELECT * FROM Machines WHERE ID = 47
另外使用的提供者是Oracle.DataAccess.Client
【问题讨论】:
-
你能显示你正在尝试执行的查询吗?
-
字面意思是
Select * from X;,另一个是Select * from x where x.foo = 'bar'; -
你确定
'bar'周围的引号字符是普通的引号字符(ascii 39)?