Saf*_*ari 3 c# oracle database-connection oraclecommand
我想重用一个 OracleConnection 对象来进行更多的查询,所以我写了一个简单的类:
public static class DbConnectionsManager
{
/// <summary>
///
/// </summary>
private static OracleConnection _dbConnection = null;
/// <summary>
///
/// </summary>
/// <param name="aConnectionString"></param>
/// <returns></returns>
public static OracleConnection GetDatabaseConnection(string aConnectionString)
{
try
{
if (_dbConnection == null)
{
_dbConnection = new OracleConnection(aConnectionString);
_dbConnection.Open();
return _dbConnection;
}
if (_dbConnection.State == System.Data.ConnectionState.Closed)
{
_dbConnection.ConnectionString = aConnectionString;
_dbConnection.Open();
return _dbConnection;
}
if (!_dbConnection.ConnectionString.Equals(aConnectionString))
{
_dbConnection.Close();
_dbConnection.ConnectionString = aConnectionString;
_dbConnection.Open();
return _dbConnection;
}
return null;
}
catch (Exception e)
{
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样我可以多次使用连接:
using (OracleConnection connection =
DbConnectionsManager.GetDatabaseConnection(aDbConnectionString))
{
OracleCommand command = connection.CreateCommand();
string sql = "SELECT * FROM MYTABLE";
command.CommandText = sql;
OracleDataReader reader = command.ExecuteReader();
while (reader.Read())
{
string myField = (string)reader["EXAMPLE"];
Console.WriteLine(myField);
}
}
Run Code Online (Sandbox Code Playgroud)
当我第一次调用该方法时,一切正常。如果我记得该方法,静态对象是 != null 但连接结果已关闭!我从不关闭连接!
当您尝试重新打开连接时,我有此异常
....
if (_dbConnection.State == System.Data.ConnectionState.Closed)
{
_dbConnection.ConnectionString = aConnectionString;
_dbConnection.Open();
return _dbConnection;
}
...
Run Code Online (Sandbox Code Playgroud)
错误
Message = "Cannot access a disposed object.\r\nObject name: 'OracleConnection'."
Run Code Online (Sandbox Code Playgroud)
正如错误所说,它是一个已处理的对象。这意味着您需要删除该using (条款;这个子句处理了你的连接对象,这就是为什么你不能在外面使用这个对象using (。这意味着如果你想在外面使用它,你需要创建一个新的类对象using (。
请参阅: C# Using 语句
| 归档时间: |
|
| 查看次数: |
5735 次 |
| 最近记录: |