【发布时间】:2012-04-05 21:37:21
【问题描述】:
我有一些使用 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);
}
然后我在生产服务器上收到以下错误。测试服务器没问题。
我不明白它抱怨连接未打开,但如果出现问题,它应该发生在我的 Open 未在 Fill 上调用时。我还认为Fill 无论如何都应该打开连接。
谁能建议可能发生的事情?
更新:从 cmets 我尝试添加这个但同样的问题:
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 命令已完成,已创建适配器并已创建表,它肯定会出错填充
【问题讨论】:
-
你能在调试信息中写出connection.State的值吗?
-
希望对您有所帮助connection-lost-contact
-
这是您的真实/实际代码,还是只是一个示例? (我怀疑这是一个被操纵的例子,因为
boxTable在填充后会失去作用域而不会被使用。)我觉得代码 sn-p 中缺少一些细节...... -
@rally25rs 你完全错了,OP 提到错误发生在
Fill不是之后也不是之前......我认为史蒂夫评论中的链接解释了一切...... -
@Steve 为什么 Fill 没有打开连接?
标签: c# .net oracle oracle10g odp.net