R.D*_*.D. 9 c# sql-server asp.net ado.net sql-server-2008
我的web应用程序在asp.net 2.0,c#2.0和sql server 208中如何在我的sql server 2008数据库上找到打开的连接数.有没有办法清除连接池.因为我的网站托管在共享主机上他们提供的连接有限.在我的编码中,我在使用后关闭了所有连接,但我仍然收到暂停数据库的警告.
任何人都可以告诉我如何在数据库上找到数字打开连接以及如何清除连接池.
我使用using语句进行连接,并在finally块中使用后关闭所有连接.所以尽管有错误,它会关闭oped连接.
提前致谢.
NG.*_*NG. 11
这显示了每个DB的连接数:
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NoOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame
Run Code Online (Sandbox Code Playgroud)
这给出了总连接:
SELECT
COUNT(dbid) as TotalConnections
FROM
sys.sysprocesses
WHERE
dbid > 0
Run Code Online (Sandbox Code Playgroud)
从c#开始,您可以
访问:http://www.c-sharpcorner.com/UploadFile/dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx
另一个很好的参考资料可以在以下网址找到:http:
//www.wduffy.co.uk/blog/监视数据库连接/
调用静态方法ReleaseObjectPool上的OleDbConnection-见http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.releaseobjectpool.aspx
您可能想阅读连接池:http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx
为每个不同的连接字符串创建一个单独的连接池。此外,如果您通过集成安全性进行连接,并且您的网站使用基本或 Windows 身份验证(而不是匿名),则将为该网站的每个用户创建一个单独的连接池。
为了清除连接池,该SqlConnection对象提供了方法ClearPool()ClearAllPool()`。但是,单个连接在关闭或处置之前不会被关闭并从池中删除。
执行 SQL 查询时涉及的所有各种对象IDisposable都应包装在一条using语句中,以保证正确处理。沿着这些思路:
IEnumerable<BusinessObject> list = new List<BusinessObject>() ;
using ( SqlConnection connection = new SqlConnection( credentials ) )
using ( SqlCommand command = connection.CreateCommand() )
using ( SqlDataAdapter adapter = new SqlDataAdapter( command ) )
using ( DataSet results = new DataSet() )
{
command.CommandType = CommandType.StoredProcedure ;
command.CommandText = @"someStoredProcedure" ;
try
{
connection.Open() ;
adapter.Fill( results ) ;
connection.Close() ;
list = TransformResults( results ) ;
}
catch
{
command.Cancel() ;
throw
}
}
return list ;
Run Code Online (Sandbox Code Playgroud)
您可以通过执行存储过程sp_who(必须在 SQL Server 中具有适当的管理员权限)来检查 Sql Server 中打开了哪些 SPID。您还可以使用 perfmon。