1 out of 3 rated this helpful - Rate this topic

SqlConnection.Close Method

Closes the connection to the database. This is the preferred method of closing any open connection.

Namespace:  System.Data.SqlClient
Assembly:  System.Data (in System.Data.dll)
public override void Close()

Implements

IDbConnection.Close()
Exception Condition
SqlException

The connection-level error that occurred while opening the connection.

The Close method rolls back any pending transactions. It then releases the connection to the connection pool, or closes the connection if connection pooling is disabled.

Note Note

Pending transactions started using Transact-SQL or BeginTransaction are automatically rolled back when the connection is reset if connection pooling is enabled. If connection pooling is off, the transaction is rolled back after SqlConnection.Close is called. Transactions started through System.Transactions are controlled through the System.Transactions infrastructure, and are not affected by SqlConnection.Close.

An application can call Close more than one time. No exception is generated.

If the SqlConnection goes out of scope, it won't be closed. Therefore, you must explicitly close the connection by calling Close or Dispose. Close and Dispose are functionally equivalent. If the connection pooling value Pooling is set to true or yes, the underlying connection is returned back to the connection pool. On the other hand, if Pooling is set to false or no, the underlying connection to the server is closed.

Note Note

Login and logout events will not be raised on the server when a connection is fetched from or returned to the connection pool, because the connection is not actually closed when it is returned to the connection pool. For more information, see SQL Server Connection Pooling (ADO.NET).

Caution note Caution

Do not call Close or Dispose on a Connection, a DataReader, or any other managed object in the Finalize method of your class. In a finalizer, you should only release unmanaged resources that your class owns directly. If your class does not own any unmanaged resources, do not include a Finalize method in your class definition. For more information, see Garbage Collection.

The following example creates a SqlConnection, opens it, displays some of its properties. The connection is automatically closed at the end of the using block.


private static void OpenSqlConnection(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        Console.WriteLine("ServerVersion: {0}", connection.ServerVersion);
        Console.WriteLine("State: {0}", connection.State);
    }
}


.NET Framework

Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
Close and Dispose are NOT functionally equivalent.
A connection can be reopened after being closed, but not after being disposed.
Very bad example
If I'm looking for Information about the ".close"-methode of the connection-class, and then I'm told that something happens automaticly by some other but absolutely unrelevant and uninteresting command, what should I think?
Connections automatically closed??
I take issue with this statement..
The connection is automatically closed at the end of the using block
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close.aspx

I used this assumption in my code and ended up with the error
Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.
SqlException
"SqlException - The connection-level error that occurred while opening the connection." [emphasis added]

Is that a typo? If not, could it please be clarified?