OracleDataAdapter.Fill“连接必须是打开”错误
问题描述:
我有一个使用ODP.NetOracleDataAdapter.Fill“连接必须是打开”错误
using (OracleConnection connection = new OracleConnection(connectionString))
{
connection.Open();
boxCommand = new OracleCommand(sql, connection);
OracleDataAdapter boxAdapter = new OracleDataAdapter(boxCommand);
DataTable boxTable = new DataTable();
boxAdapter.Fill(boxTable);
}
然后我得到低于生产服务器上的错误一些代码。测试服务器很好。
我不明白它的抱怨不是打开的连接,但如果有问题就应该在点我Open
发生不叫上Fill
。无论如何,我还以为Fill
应该打开连接。
任何人都可以提出可能会发生什么?
UPDATE:从意见我尝试添加这一点,但同样的问题:
using (OracleConnection connection = new OracleConnection(connectionString))
{
connection.Open();
while(connection.State != ConnectionState.Open)
{
connection.Close();
connection.Open();
}
boxCommand = new OracleCommand(sql, connection);
OracleDataAdapter boxAdapter = new OracleDataAdapter(boxCommand);
DataTable boxTable = new DataTable();
boxAdapter.Fill(boxTable);
}
更新2:我添加日志记录和验证连接= true来连接字符串和我知道的连接状态是否已打开,盒子命令已完成,已创建适配器并已创建表格,它在填充时肯定会出错
答
您可以尝试安装latest version of ODP.Net并查看您是否仍然存在问题?你应该可以运行最新的ODP.Net,即使对于较旧的Oracle DB(在你的情况下为10g)。
编辑: 既然你限制到特定ODP.net版本,这里有一些其他的事情要尝试:
-
确保正确的Oracle文件夹是在系统的开始路径。例如,我在我的路径开始处有Oracle文件夹,就像这样(我的ODP.net安装在c:\ oracle \ ora11g中,并且我还安装了Oracle 10g Express Edition,但请注意,ODP.net文件夹是第一:
C:\ ORACLE \ ora11g \产品\ 11.1.0 \的Client_1; C:\ ORACLE \ ora11g \产品\ 11.1.0 \的Client_1 \ BIN; C:\ ORACLE \ ORA10G \ BIN;
我在哪里见过甲骨文做奇怪的事情,如果路径不正确将无法正常工作的情况。
尝试重新安装所使用。这应该清理的东西了具体ODP.net版本希望能解决你的问题UE。
你可以在调试信息中写出connection.State的值吗? – cadrell0 2012-04-03 15:27:09
我希望这可以帮助[连接丢失,联系](是http://stackoverflow.com/questions/3370078/oracle-dataaccess-client-oracleexception-ora-03135-connection-lost-contact) – Steve 2012-04-03 15:31:16
那是你的真实/实际代码,还是只是一个例子? (我怀疑这是一个装好的例子,因为'boxTable'会在没有被填充后使用的情况下松动范围。)我感觉代码片段中缺少一些细节... – CodingWithSpike 2012-04-03 15:37:24