OracleDataAdapter.Fill“连接必须打开”错误

时间:2012-04-03 15:23:35

标签: c# .net oracle oracle10g odp.net

我有一些使用ODP.Net的代码

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);
}

然后我在生产服务器上收到以下错误。测试服务器没问题。

Error Image

我不明白,因为它抱怨连接没有打开,但如果出现问题,我的Open不会被Fill调用。我还以为Fill应该打开连接。

任何人都可以建议可能发生的事情吗?

更新:从评论中我尝试添加此问题但问题相同:

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:我已经在连接字符串中添加了日志记录和Validate Connection = true,我知道连接状态已打开,box命令已完成,适配器已创建且表已创建,它肯定是错误的填充

1 个答案:

答案 0 :(得分:0)

您可以尝试安装latest version of ODP.Net,看看是否还有问题吗?您应该能够运行最新的ODP.Net,即使是较旧的Oracle DB(在您的情况下为10g)。

修改: 由于您仅限于特定的ODP.net版本,因此还需要尝试以下其他方法:

  • 确保正确的Oracle文件夹位于系统路径的开头。例如,我在路径的开头有Oracle文件夹,就像这样(我在C:\ oracle \ ora11g中安装了ODP.net,我也安装了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;

    我见过Oracle做奇怪事情的情况,如果路径不正确,将无法正常工作。

  • 尝试重新安装您正在使用的特定ODP.net版本。这应该清理干净并希望解决您的问题。