我一直在使用Oracle ODP.NET, Managed Driver从C#发出查询。
我写的很多查询都是永远来返回任何数据;就像它忽略了我的行限制条款:
SELECT TOP 10 *
FROM Customers
或
SELECT *
FROM Customers
FETCH FIRST 10 ROWS ONLY
就像Oracle忽略了我的 10 行限制,并开始返回所有内容 - 因为它正在 永远 返回。最终我意识到查询忙于返回大量数据并不是事实。这是查询SQL无效。
当您向Oracle发出无效的SQL时,它不会因错误而失败。
select top 10 * from customers;
select 'Hello, world!';
select sysdate from duel;
select sysdate fro;
Ceilings make pie and markers drive the ocean with their feet
Oracle将坐在那里等待命令超时到期。
IDbCommand cmd = connection.CreateCommand();
cmd.CommandText = "Ceilings make pie and markers drive the ocean with their feet";
IDataReader rdr = cmd.ExecuteReader(); //<--will wait forever
while (rdr.Read())
{
//...
}
我最终意识到Oracle.ManagedDataAccess.Client.OracleCommand
对象( bizzarly )没有CommandTimeout
;它默认为永远运行。一旦我将其更改为更合理的30秒,我就会看到错误消息:
ORA-12537:网络会话:文件结束
如果我的SQL语句中有错误,Oracle ODP.NET,托管驱动程序或连接字符串或OracleCommand
中是否有选项告诉服务器抛出错误?< / p>
Oracle为ADO.net提供了两个数据库驱动程序
Microsoft已经创建了一个Oracle驱动程序,它包含在.NET Framework中。 But that driver is deprecated,不再在.NET 4.5中运行需要安装完整的Oracle客户端软件版本8.1.7或更高版本( System.Data.OracleClient )