I have several Delphi programs (XE3), that use a TADOConnection to connect to a MS-SQL Server. I recently checked the connections in the "MS SQL Server Management Studio"'s process list.
- When the program starts, the connection is inactive, no connection in the server's process list.
- When I open the connection it's shown in the process list - as expected.
- When I close the connection (definitely the property "Connected" returns FALSE), the connection is still shown on the servers process list.
On the server the Connection is not closed until I close the program.
Is there a way to close the TADOConnection in a way that really removes the connection on the server without exiting the program?
This is connection pooling; and is a good thing.
But if you really want to hurt performance, you can opt-out of connection pooling features by adding the request to your connection string:
Provider=SQLOLEDB;Data Source=myServerAddress;Initial Catalog=myDataBase;
User ID=myUsername;Password=correct horse battery stapler;OLE DB Services=-2;
These OLE DB Services
options are documented on MSDN:
Pooling in the Microsoft Data Access Components (archive)
OLE DB Services Services enabled =============== ================================================== -1 All services (the default) -2 All services except pooling -4 All services except pooling and auto-enlistment -5 All services except client cursor -6 All services except client cursor and pooling 0 No services
来源:https://stackoverflow.com/questions/48705373/tadoconnection-close-connection-still-active-on-ms-sql-server