【发布时间】:2012-06-17 16:12:18
【问题描述】:
当我运行以下 .Net 代码时:
using (var c = Shared.DataSources.BSS1.CreateCommand())
{
c.CommandText = "\r\nSelect c1, c2, c3, rowid \r\nFrom someSpecificTable \r\nWhere c3 = :p0";
var p = c.CreateParameter() as Oracle.DataAccess.Client.OracleParameter;
c.Parameters.Add(p);
p.OracleDbType = Oracle.DataAccess.Client.OracleDbType.Varchar2;
p.DbType = System.Data.DbType.AnsiString;
p.Size = 20;
p.Value = "007";
p.ParameterName = ":p0";
using (var r = c.ExecuteReader())
{
r.Read();
}
}
我收到以下错误:
ORA-01460: unimplemented or unreasonable conversion requested
ORA-02063: preceding line from XXX
这不是我的数据库,我无法控制我得到的选择语句,该表来自数据库链接。
有趣的是,如果我在 ExecuteReader 之前添加以下代码,它运行良好。
c.CommandText = c.CommandText.Replace("\r\n", " ");
不幸的是,在我的情况下,这不是一个好的解决方案,因为我无法控制 SQL,也不能这样更改。
至于表本身,列是: c1 编号(5) c2 varchar2(40) c3 varchar2(20).
我知道之后出现的 ORA-02063 表示有关数据库链接的某些内容,但我查看了同义词表,它不是来自任何 database_link,而且我认为 \r\n 不会影响数据库链接。
我尝试在没有绑定参数的情况下运行查询,它确实有效 - 但笼统地说,这样做又是一种不好的做法。
问题在于,不是基于 .Net 的竞争工具正在运行,因此这不是一个普遍问题。
我也无法在我自己的环境中重现该问题,这是一个客户数据库和站点。 我正在使用即时客户端 11.1.6.20,还使用即时客户端 11.2.3.0 对其进行了测试
db 为 10,db 链接指向 oracle v8 数据库
任何帮助将不胜感激
【问题讨论】:
-
你不能控制 SQL 但你还是执行它?所以你只是拿用户给你的任何东西?抱歉,我可能误解了情况。
-
这是一个自动从一种语言迁移到另一种语言的应用程序。大多数 SQL 都是动态自行生成的。其中一些嵌入在代码中。
-
我猜它一定是我在 .Net 驱动程序或应用程序中的一些东西。例如通过 JDBC 运行带有嵌入换行符的 SQL 语句完全没有问题
-
不是每个查询。这是这个特定的查询。我运行了数千个其他查询,一切都很好。
-
我认为这与绑定变量、odp.net 和数据库链接有关。