简体   繁体   中英

c# odbcconnection not closing

I've got a problem with the OdbcConnection in c#. I've written a class that wraps my connections and commands into a generic interface. The code looks basically like this (I've left out some unimportant parts)

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

I open a connection, execute my desired command and the call disposeConnection . But our Database (SAP Sybase SQL ver.11,16,17) still shows the connection in the "PREFETCH" state...

The disposeConnection is called inside a finally block after the SQL command is executed.

Why is the connection not closed correctly?

I've finally found the solution. I've left the DbDataReader open. I had to wrap all the DbDataReaders inside a using block. Now my connections are closed when I call _connection.close() .

So it doesn't matter if the connection is in the closed state, if any other object is acessing the database, the connection is not realy closed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM