带有连接的Oracle上的ExecuteReader

时间:2012-10-01 15:52:10

标签: .net c#-4.0 oracle10g

我使用oracle express 10g2和.net连接器(oracle.dataaccess.dll)。

我的问题是我有2张桌子可加入A和B;

在sqlDeveloper中我称之为:

select * from A; //no problem
select * from B; // no problem
select * from A inner join B on B.id = A.bId; // no problem + joining

我的c#class(LocalOracleDataProvider.cs);

var cm1 = connection.CreateCommand();
cm1.CommandText = "select * from A;";
var cm2 = connection.CreateCommand();
cm2.CommandText = "select * from B;";
var cm3 = connection.CreateCommand();
cm3.CommandText = "select * from A inner join B on B.id = A.bId;";
...
var dt1 = cm1.ExecuteReader(); // ok
var dt2 = cm2.ExecuteReader(); // ok
var dt3 = cm3.ExecuteReader(); // crash oracle error ORA-00911 : invalid character

我不明白这个问题...... 是我的错误请求我没有看到? 或者是否有任何问题(没有找到一个 - 我一个人在这吗?)? 我必须创建一个封装加入请求的sqlview吗? 或任何其他绕道?

先谢谢你们!

3 个答案:

答案 0 :(得分:0)

尝试将第三个命令转换为:

cm3.CommandText = "select * from A inner join B on ( B.id = A.bId ) ;";

答案 1 :(得分:0)

尝试在sql语句的末尾删除分号 在SELECTs语句中,不允许使用分号,但在其他语句中,如CALL和EXECUTS,则需要使用分号。

此外,这可能是多余的,但添加

cm3.CommandType = CommandType.Text;

答案 2 :(得分:0)

找到它...... ExecuteReader与“;”

不兼容