c# odbcconnection 没有关闭
c# odbcconnection not closing
我在 C# 中遇到 OdbcConnection 问题。我写了一个 class 将我的连接和命令包装到一个通用接口中。代码基本上是这样的(我省略了一些不重要的部分)
//connection, command, _connectionType and _commandType are class members
private void getConnection(ref String commandText, out DbConnection connection, out DbCommand command, params DbParameter[] parameter)
{
connection = Activator.CreateInstance(this._connectionType) as DbConnection;
connection.ConnectionString = this._connectionString;
connection.Open();
command = Activator.CreateInstance(this._commandType) as DbCommand;
command.Connection = connection;
command.CommandText = commandText;
}
//Other methods use the DbCommand for SELECTS, UPDATES, etc...
private void disposeConnection()
{
this._command.Dispose();
this._connection.Close();
this._connection.Dispose();
this._command = null;
this._connection = null;
}
我打开一个连接,执行我想要的命令并调用 disposeConnection
。但是我们的数据库(SAP Sybase SQL ver.11,16,17)仍然显示 "PREFETCH" 状态的连接...
执行 SQL 命令后,在 finally
块内调用 disposeConnection
。
为什么连接没有正确关闭?
我终于找到了解决方案。我让 DbDataReader
保持打开状态。我不得不将所有 DbDataReaders
包装在一个 using 块中。现在,当我调用 _connection.close()
.
时,我的连接已关闭
所以连接是否处于关闭状态并不重要,如果有任何其他对象正在访问数据库,连接并没有真正关闭。
我在 C# 中遇到 OdbcConnection 问题。我写了一个 class 将我的连接和命令包装到一个通用接口中。代码基本上是这样的(我省略了一些不重要的部分)
//connection, command, _connectionType and _commandType are class members
private void getConnection(ref String commandText, out DbConnection connection, out DbCommand command, params DbParameter[] parameter)
{
connection = Activator.CreateInstance(this._connectionType) as DbConnection;
connection.ConnectionString = this._connectionString;
connection.Open();
command = Activator.CreateInstance(this._commandType) as DbCommand;
command.Connection = connection;
command.CommandText = commandText;
}
//Other methods use the DbCommand for SELECTS, UPDATES, etc...
private void disposeConnection()
{
this._command.Dispose();
this._connection.Close();
this._connection.Dispose();
this._command = null;
this._connection = null;
}
我打开一个连接,执行我想要的命令并调用 disposeConnection
。但是我们的数据库(SAP Sybase SQL ver.11,16,17)仍然显示 "PREFETCH" 状态的连接...
执行 SQL 命令后,在 finally
块内调用 disposeConnection
。
为什么连接没有正确关闭?
我终于找到了解决方案。我让 DbDataReader
保持打开状态。我不得不将所有 DbDataReaders
包装在一个 using 块中。现在,当我调用 _connection.close()
.
所以连接是否处于关闭状态并不重要,如果有任何其他对象正在访问数据库,连接并没有真正关闭。