2016-11-23 115 views
0

我有一个应用程序,它在一天的特定时间查询数据库,然后它闲置未来3-4小时,然后再次查询数据库的一些数据,但它只被执行一次,并在第二次尝试是抛出一个错误。甲骨文连接获取超时

using (OracleConnection connection = new OracleConnection()) 
{ 
    connection.ConnectionString = connectionString; 
    connection.Open(); 
    OracleCommand command = connection.CreateCommand(); 
    string sql = _query; 
    command.CommandText = sql; 

    OracleDataAdapter oAdapter = new OracleDataAdapter(sql, connection); 
    oAdapter.Fill(myDataSet); 
    connection.Close(); 
    return myDataSet; 
} 

错误是在被抛出:

oAdapter.Fill(myDataSet); 

和错误统计为ORA-03113: end-of-file on communication channel

要应设一个电话后,我的理解方面,它应该建立在每个请求另一个连接。我已检查到服务器的连接可用并正在侦听,发生此错误时没有网络问题。

+0

您是否尝试过创建'myDataSet'的一个新的'DataSet'实例? – hofmeister

+0

是的,因为每次调用的具体原因,我正在为myDataSet创建一个新的实例。 – user1764351

+0

与您的IT部门交谈,或许防火墙会触发一些超时。 –

回答

1

我得到了它,对于任何一个其他人在寻找的答案是,我打电话return myDataSet; using语句内第一,我没有注意到它,但作为OracleConnection正在从IDisposable的继承和我正在恢复中using语句,这样它的数据集从来没有得到妥善处理。所以我只是改变了这种从

using (OracleConnection connection = new OracleConnection()) 
{ 
connection.ConnectionString = connectionString; 
connection.Open(); 
OracleCommand command = connection.CreateCommand(); 
string sql = _query; 
command.CommandText = sql; 
OracleDataAdapter oAdapter = new OracleDataAdapter(sql, connection); 
oAdapter.Fill(myDataSet); 
connection.Close(); 
return myDataSet;} 

using (OracleConnection connection = new OracleConnection()){ 
connection.ConnectionString = connectionString; 
connection.Open(); 
OracleCommand command = connection.CreateCommand(); 
string sql = _query; 
command.CommandText = sql; 
OracleDataAdapter oAdapter = new OracleDataAdapter(sql, connection); 
oAdapter.Fill(myDataSet); 
connection.Close(); } 
return myDataSet;