在使用C#执行参数化查询时出现ORA-01745错误

16

我正在做类似于

...
OracleCommand oCommand = new OracleCommand();
oConnection.Open();
oCommand.Connection = oConnection;
oCommand.CommandText = "SELECT * FROM employees WHERE user = :User";
oCommand.Parameters.AddWithValue(":Name", "Employee1");

DbDataReader dbRdr = oCommand.ExecuteReader();

那么这将抛出一个异常:

ORA-01745:无效的主机/绑定变量名称

编辑:连接字符串如下:

"Data Source=orcl;Persist Security Info=True;User ID=user_id;Password=pwd;Unicode=True"

oConnection.Open();执行后没有出现错误,因此我认为我的连接字符串是正确的。

我犯了哪些错误?


连接字符串似乎有误(指定的主机名可能不正确)。你能把它放在问题中吗? - Oscar Foley
这段代码看起来没问题。你的连接字符串是什么? - Soner Gönül
@Bahamut,这是你真正的查询吗?因为它不应该在此查询上引发异常。 - Habib
@Habib 我的查询基本上是一样的。我使用了一个简单的包装器,但我已经设置了断点,参数和连接文本与这个查询完全相同。 - Bahamut
1
@Bahamut,这个错误提示表明使用了保留字,所以我才问的。 - Habib
@Habib 谢谢你指出这个问题。我会尝试重新命名变量来确保。 - Bahamut
2个回答

40

ORA-01745: 无效的主机/绑定变量名称

原因:在绑定变量或INTO规范中,冒号后面跟着一个不当的名称,可能是保留字。

操作:更改变量名称并重试操作。

here

要检查哪些是保留字,请单击here


我曾将“:User”用作变量名。必须小心处理Oracle查询...下次应该先尝试这个。 - Bahamut
6
我忍不住要评论一下那些毫无用处的Oracle错误信息... 在错误信息中加入原因句子会有多难吗? - Rashack

0

使用 using 块包装 Oracle 连接,并提供正确的 connectionString。

using (OracleConnection con = new OracleConnection(connectionString)) {
    OracleCommand oCommand = new OracleCommand(queryString, connection);
    ....
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接