个人抽屉

博客园 首页 新随笔 联系 订阅 管理

     本人在维护一个系统时,开始使用ADO.NET连接ORACLE,后来客户提出用ODP.NET也可以连接。但之前SELECT文里有参数,在ADO.NET是正常的,换成ODP.NET就出错。

使用OracleDataAdapter.Fill的方法、以下是SQL文运行的情况。

SQL文:

select ColA as TitleA, :ColB as TitleB from TableName;

※:ColB是参数。

□ADO.NET的场合(System.Data.OracleClient):

・代码:

command.CommandText = "select ColA as TitleA, :ColB as TitleB from TableName"

command.Parameters.Add("ColB", OracleType.VarChar, 20).Value= "2008"

Dim da As OracleDataAdapter = New OracleDataAdapter(command)

Dim dt As DataTable = New DataTable("Test")

da.Fill(dt)

・结果:

  成功

□ODP.NET的场合(Oracle.DataAccess.Client):

・代码:

command.CommandText = "select ColA as TitleA, :ColB as TitleB from TableName"

command.Parameters.Add("ColB", OracleDbType.Varchar2, 20, "2008",ParameterDirection.Input)

Dim da As OracleDataAdapter = New OracleDataAdapter(command)

Dim dt As DataTable = New DataTable("Test")

da.Fill(dt)

・结果:

  例外:ORA-01036: 非法的变量名/编号。

※再現環境

・Oracle 10g和ODP.NET 10g

- Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 -32bit Production

- Oracle Data Provider for .NET 2.0 10.2.0.2.21 Production

・Oracle 11g和ODP.NET 11g

- Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 -64bit Production

- Oracle Database 11g Release 1 Client (11.1.0.6.0) for Microsoft Windows 32bit

- Oracle Data Provider for .NET 2.0 11.1.0.6.20 Production

这是ODP.NET的问题,在使用时要注意。

 

 

posted on 2008-11-05 22:21  个人抽屉  阅读(1276)  评论(0编辑  收藏  举报