62,074
社区成员
发帖
与我相关
我的任务
分享
应用程序信息:
应用程序域: /LM/W3SVC/2112557531/Root-1-130594627685000000
信任级别: Full
应用程序虚拟路径: /
应用程序路径: F:\website\51tou\Web\
计算机名: iZ23y4o9xm6Z
进程信息:
进程 ID: 28748
进程名: w3wp.exe
帐户名: NT AUTHORITY\NETWORK SERVICE
异常信息:
异常类型: InvalidOperationException
异常消息: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
请求信息:
请求 URL: http://www.myr9.com/3dxhq/detail/default.aspx?id=101440
请求路径: /3dxhq/detail/default.aspx
用户主机地址: *.*.246.86
用户:
是否已经过身份验证: False
身份验证类型:
线程帐户名: NT AUTHORITY\NETWORK SERVICE
线程信息:
线程 ID: 6
线程帐户名: NT AUTHORITY\NETWORK SERVICE
是否正在模拟: False
堆栈跟踪: 在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
在 System.Data.SqlClient.SqlConnection.Open()
在 DBPicHelper.Query(String SQLString)
在 jetlau.Web._3dxhq.detail._default.GetGirl()
在 jetlau.Web._3dxhq.detail._default.Page_Load(Object sender, EventArgs e)
在 System.Web.UI.Control.OnLoad(EventArgs e)
在 System.Web.UI.Control.LoadRecursive()
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
自定义事件详细信息:
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
USE [master]
GO
/****** Object: StoredProcedure [dbo].[killspid] Script Date: 11/05/2014 09:41:59 by Issac******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[killspid] (@dbname VARCHAR(20))
AS
BEGIN
DECLARE @SQL nvarchar(500)
DECLARE @spid INT
SET @SQL='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''') and status=''sleeping''AND last_batch < dateadd(MINUTE, - 30, getdate()) AND login_time < dateadd(MINUTE, - 30, getdate())'
--
EXEC (@SQL)
OPEN getspid
FETCH NEXT FROM getspid INTO @spid
WHILE @@fetch_status < >-1
BEGIN
EXEC('kill '+@spid)
FETCH NEXT FROM getspid INTO @spid
END
CLOSE getspid
DEALLOCATE getspid
END
using (var conn = new OracleConnection(cnStr))
{
conn.Open();
var comm = conn.CreateCommand();
comm.CommandText = "select * from all_tables where temporary='N'";
comm.CommandType = System.Data.CommandType.Text;
result = (from DbDataRecord record in comm.ExecuteReader() //result 是在Using{ }外部定义的
let name = (string)record["TABLE_NAME"]
where name.EndsWith("ak")
select new MyTableDefine { TableName = name }).ToList();
}
这种代码。这里用不着写Close()代码,但是可以保证即使是程序异常,那么conn也会及时关闭。
养成另一种书写规范,胜过你去总是一遍遍人工查看“数据库连接都有关闭”![/quote]
谢谢给出的提示,数据库链接的方法是你写的这样.而且也会回收连接数,只是回收的速度远远不及创建的速度.因为有多个站连接这一个数据库,可能是过度的OPEN造成的.查看连接数有很多sleepingusing (var conn = new OracleConnection(cnStr))
{
conn.Open();
var comm = conn.CreateCommand();
comm.CommandText = "select * from all_tables where temporary='N'";
comm.CommandType = System.Data.CommandType.Text;
result = (from DbDataRecord record in comm.ExecuteReader() //result 是在Using{ }外部定义的
let name = (string)record["TABLE_NAME"]
where name.EndsWith("ak")
select new MyTableDefine { TableName = name }).ToList();
}
这种代码。这里用不着写Close()代码,但是可以保证即使是程序异常,那么conn也会及时关闭。
养成另一种书写规范,胜过你去总是一遍遍人工查看“数据库连接都有关闭”!