DataSource Controls :: Connections Are Being Pooled Even With "Pooling=False"?
Jan 27, 2010
Recently I bumped a problem with an asp.net application where seemingly random errors were thrown, although they were all related to the use of a connection object. Coming from Classic ASP, I wrote my pages by creating a connection object at the top of the page, and using that connection throughout the page. The connection object was opened whenever something had to be done with the database and closed immediately after.
Connectionstring:
"Data Source=<server>;Initial Catalog=<catalog>;Integrated Security=false;user=<user>;password=<password>;Pooling=False;"
So pooling=false.
I'm implementing a Google like search box in my asp.net application. Each keypress in the box sends an Ajax request to IIS webmethod that queries the txt and return matches - works pretty cool. However, on loading up activity (e.g. 300 users), I'm getting errors that my 100 Pooled connections are used up. Now I'm rethinking that perhaps opening/closing a db connection on each keystroke may be too much. How would one architect this differently, or insure that the connections are reclaimed really fast. I'm have the 'using' construct for connections to insure it is closed. The concern is GC may not be reclaiming them fast enough?
How would google handle such a large open/close cycle.
We have an Oracle 11g database with two nodes. On occasion, one of the nodes goes down and for some reason one of my applications starts throwing this exception:
Error Message: System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.InvalidOperationException: 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. at System.Data.OracleClient.OracleConnectionPoolManager.GetPooledConnection(String encryptedConnectionString, OracleConnectionString options, OracleConnection owningObject, Boolean& isInTransaction) at System.Data.OracleClient.OracleConnection.OpenInternal(OracleConnectionString parsedConnectionString, Object transact) at System.Data.OracleClient.OracleConnection.Open() Out IT group says that this is a program bug because the failover isn't working, but I am thinking that this is a function of the database.What is the cause, and if it is an application bug, what can be done code-wise to fix this problem? The connection string doesn't specify a particular node.
I'm not having much fun with connection pooling. The website I've written does dip into the SQL server all the time and quite a lot of times per page. Every time I nip into the SQL Server to get or set something I open a connection...
comGeneral.Connection.Open()
... do or get what I need and then close it. From what I've read any of the following should close the connection and return "one connection" (?) to the pool (top one, only if reading)....
... but that's not really working for me and I keep hitting the default max 100 open pools. So I've been doing all 3 of the above (again, top one, only if reading). But alas, still the stupid thing (Yes, I am aware I'm the stupid one) keeps hitting the max.
My new plan is to set pooling to false (pooling = false ?) across the entire website and take the performance hit which wont be terrible because I don't really do anything too demanding. Trouble is I don't know how, other than setting Pooling = False, but where exactly in the webconfig would this bit of code go?
I'm currently experiencing and issue on whether to say a connection has been left open due to my code or if it's left open due to ADO.NET pooling. Here's a sample of my code:
Public Function ExecuteDataTable(ByVal strStoredProc As String, Optional ByVal objParams As SqlParameter() = Nothing, Optional ByVal cmdType As CommandType = CommandType.StoredProcedure) As DataTable Dim objDt As New DataTable Dim objAdapt As New SqlDataAdapter Dim objParam As SqlParameter Try OpenDb() If Not IsNothing(objParams) Then AddParams(objParams) End If objAdapt.SelectCommand = New SqlCommand With objAdapt.SelectCommand
[Code].....
Then when I go to open up the SQL Mgmt Studio, I look into the processes and the particular connection that has ran with the SQL that my function runs appears to remain open. So to me, it looks like ADO.NET is performing some kind of pooling. Is it safe to make that conclusion? How would I be able to tell if the connection is available to be used again by the ADO.NET pool?
i expect it to fail at 101 iteration as the default max pool size is 100 and i am not releasing any connection after i open(ie., Not closing or Disposing). But the strange behaviour is i can go up to 230 iterations and then it gives me a timeout error, can not acquire new connection.
When i look in SQL Database for number of connections created it is only 100.
My question is : When connection is not released, how is it able to re-use the previously opened connection.
I've been playing about for ages in an attempt to get a simple bit of code that can detect whether or not SQL Server is listening remotely or just locally.. My pretty lame attempt so far is as follows:
[Code]....
I'm sure there must be a better way to do this! Aside from the fact that this code fails to work properly.
sp.IPAddresses contains:
- 127.0.0.1 - 0.0.0.0 - 10.0.0.10
When I used Surface Area Manager > Surface Area Configuration for Services and Connections and set Remote Connections to "Local connections only" sp.IPAddresses still contains the same addresses.
My lecturer insists that a web site should NOT have a static SQL connection as its not good practice (didn't explain why) but then I thought that if one makes instances of an SQL connection everytime I want to save, delete or edit then surely thats a bottleneck as I would need to everytime establish a connection and then do the save process. From what I have read online, the process of establishing a connection to the server is the longest (about 5 to 10ms)...
How would one manage their SQL connection. At the moment I do something like:
the SQL connection option ARITHABORT is OFF for OLEDB connections, which I assume Linq To SQL is using. owever I need it to be ON. The reason is that my DB contains some indexed views, and any insert/update/delete operations against tables that are part of an indexed view fail if the connection does not have ARITHABORT ON. Even selects against the indexed view itself fail if the WITH(NOEXPAND) hint is used (which you have to use in SQL Standard Edition to get the performance benefit of the indexed view).Is there somewhere in the data context I can specify I want this option ON? Or somewhere in code I can do it??I have managed a clumsy workaround, but I don't like it .... I have to create a stored procedure for every select/insert/update/delete operation, and in this proc first run SET ARITHABORT ON, then exec another proc which contains the actual select/insert/update/delete. In other words the first proc is just a wrapper for the second. It doesn't work to just put SET ARITHABORT ON above the select/insert/update/delete code.
web service show me this errorFailureA network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified) App_Code.d-vwopz6my sql version in 8.00.2039 how to configure SQL 8.00.2039 to allow remote connections
We have developed web application using Asp.net, C# and SQL Server. However, When viewing the Process Info Tool for MS SQL Server, we see lots of processes (150-1000+) with Status = 'sleeping' and Command = 'AWAITING COMMAND' (Application = '.Net SqlClient Data Provider')The DataReaders and Connections are all being closed, but still the sleeping connections are accumulating. The problem becomes so severe that we finally get a "General Network Error" or a "Internal system error" and if we restart IIS. We have tested a lot but no success.
I think I have a problem that I never noticed before. I was just recently (as in tonight) shown the SQL Server Profiler. I noticed that on a video that I watched there profiler did not move unless there was a query to the database, thus making it easy to see what exactly was going on. When I opened mine for the first time and ran it I am getting 9 logs every say 5 seconds. They consist of;
Does anyone know if this is normal or my database just working way to hard?
I just restarted the server and checked databases for active connections now that I know nothing is running, and found the one database that is causing the problem... ReportServer has 4 connections after my restart. Should I leave this alone? Is it normal to have this reporting constantly going on?
I am new to using ADOMD for accessing SSAS cubes. I am having an issue with concurrency. I am using ADOMD to connect to SSAS 2005 in an ASP.Net 2008 application. When a user executes an MDX query and the ASP.net page opens an ADOMD connection, a second user that tries to execute an MDX query gets "a connection is already open" error. I don't understand how ADOMD works. Does it open only one connection for all users because ASP.Net is using a single account for all connections from the web server? I do not have this problem when using ADO.net in the same manner.
I am trying to make a small utility program to update a table in a database.
I made it as a asp.net 2008 project and connected to the development SQL server(which is located locally).It is working fine.
Then I try to move this to production, I realized that the sql server is located in another state and I can not connect it this way.( connection string from webconfig and open the connection).I can not change any configuration of the prod sqlserver.
I get error like sql server does not accept remote connection.( Verify that SQL Server is configured to allow remote connections).
I am trying to make a small utility program to update a table in a database.
I made it as a asp.net 2008 project and connected to the development SQL server(which is located locally).It is working fine.
Then I try to move this to production, I realized that the sql server is located in another state and I can not connect it this way.( connection string from webconfig and open the connection).I can not change any configuration of the prod sqlserver.
I get error like sql server does not accept remote connection.( Verify that SQL Server is configured to allow remote connections).
In my DAL i have more than 100 methods/Function, each and every method am opening the sqlconnection and closing the connection, this is taking too much of time to establish the connection at every time. So what i expect is one common class will create the SqlConnection that will check if the connection is Broken or Closed then create the connection again else return the connection, how to do this(Also i would like to apply ConnectionPooling).
i have a web application that use a MySql DataBase. In a page, i have used the sqlDatasource control. The problem is that the conection with the database doesn't closed and i have a lot of open conections until show me the error that says me that the conection pool is full.
SQL Server Express 2005 MS Visual Studio 2005 Using ASP.NET with VB code behind. Requirements: Click a button on an ASPX page to disconnect temporarily all DB connections when not in use to allow a script to backup/copy the database to a safe backup location. When a user access the db afterwords, the DB connections will be re-established.
If this is imposible, recommend an alternative. Note: I am working with what I have been given and authorized to use.
I don't understand how the stored procedure is returning false. It's supposed to continue looping and continue writing rows. Right now it writes the very first row, and then it goes into the If Not AdvanceLinkBanned.Add(banrec) Then and it goes in here, prints the message and exits the sub. Why is it thinking the add returns false? If Not AdvanceLinkBanned.Add(banrec) ? Doesn't this return the id of the new record? Isn't this not zero? Zero would make it false. How can this be false? Isn't it supposed to return the next record created ? Doesn't SELECT SCOPE_IDENTITY() return the value of the record id? How do I test this?
What I'm trying to achieve is to track any change made on a form. I thought DataSet.HasChanges and DataSet.GetChanges would be a good way to accomplish this. However, in the code below DataSet.HasChanges always returns false.
EmployeeDs represents a strongly typed DataSet.how to get changes from the updated row into the new dataSet?
In my database I have boolean column to declare if something is 'active'. In my web application I would only like one item to be able to have the 'active' status at once.
Therefore I have a radio button list in my aspx page to force the user to select one item. I know it is easy to set the selected item to true through my SQL update statement, but how do I automatically set everything else back to false/null!?
Am stuck with this sql stored procedure/asp.net vb.
I want to call the stored procedure and for it to return a true or false if successful ie username and password match.
My stored procedure works fine, and I can call it from my vb, however I stuck as to how I get it to return a result of true or false, 1 , 0. I just get a blank page.
We're trying to get connection pooling working with uodotnet and currently failing miserably. When we turn connection pooling off everything works as expected, but when we turn it on we often get timeouts or errors with one of the following trace outputs:
2011-03-28T15:09:28 System.Exception: Non-negative number required.
[Code]....
Not all the requests fail (for example, when run through a load testing tool, 7/20 requests failed with the timeout problem).
It seems that the sessions are remaining in the pool and new attempts to create a session are repeating until the timeout limit is reached (30 seconds). We're using uodotnet.dll version 2.1.1.7196 and UniVerse version 10.3. running on an HP-UX server. We've got a single license on the dev machine we're testing on with 10 connections available in the pool (theoretically!). We're writing an ASP.Net web site, and we create a new session in the Page_Load() event which is passed to all UniVerse routines and then call close on the session in Page_Unload()/Page_Error().
to what we're doing wrong? We expected that connection pooling would improve performance, falling back on the standard mechanism if the pool was full, but whereas the non-pooled version works fine with 20 simultaneous requests, the pooled version regularly fails. We've set the connection pooling on in the application's web.config, setting MinPoolSize to 1 and MaxPoolSize to 10, leaving everything else at the defaults.