问题是这样的,开始可以正常访问网页,但是访问一段时间后,快则几分钟,慢则一二个小时,出现下面的错误。需要重启iis才能正常访问。但是隔段时间后又会这样,请问是什么问题。 下面贴上我连接数据库的代码
西面是数据库连接代码
==========================================
public class DB
{
OleDbConnection conn = null;
OleDbCommand cmd = new OleDbCommand();
public DB()
{ string dbname = System.Web.HttpContext.Current.Server.MapPath("App_Data/#[email protected]"); string connStr = "PROVIDER=microsoft.ACE.oledb.12.0;Data Source=" + dbname;
conn = new OleDbConnection(connStr);
}
public OleDbConnection getCon()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn;
}
public void clear()
{
if (conn.State == ConnectionState.Open)
conn.Close();
}
public string getScalar(string strSql)
{
cmd.Connection = getCon();
cmd.CommandText = strSql;
string result = cmd.ExecuteScalar().ToString();
clear();
return result;
}
}就是在 getCon 的 conn.Open() 出错
下面是错误提示
===========================================
“/electech”应用程序中的服务器错误。
--------------------------------------------------------------------------------未指定的错误
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 未指定的错误源错误:
行 36: if (conn.State == ConnectionState.Closed)
行 37: {
行 38: conn.Open();
行 39: }
行 40: return conn;
源文件: d:\web\electech\App_Code\DB.cs 行: 38 堆栈跟踪:
[OleDbException (0x80004005): 未指定的错误]
System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +968297
System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +86
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) +29
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +4861516
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +117
System.Data.OleDb.OleDbConnection.Open() +40
DB.getCon() in d:\web\electech\App_Code\DB.cs:38
DB.getScalar(String strSql) in d:\web\electech\App_Code\DB.cs:49
about.Page_Load(Object sender, EventArgs e) in d:\web\electech\about.aspx.cs:30
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
西面是数据库连接代码
==========================================
public class DB
{
OleDbConnection conn = null;
OleDbCommand cmd = new OleDbCommand();
public DB()
{ string dbname = System.Web.HttpContext.Current.Server.MapPath("App_Data/#[email protected]"); string connStr = "PROVIDER=microsoft.ACE.oledb.12.0;Data Source=" + dbname;
conn = new OleDbConnection(connStr);
}
public OleDbConnection getCon()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn;
}
public void clear()
{
if (conn.State == ConnectionState.Open)
conn.Close();
}
public string getScalar(string strSql)
{
cmd.Connection = getCon();
cmd.CommandText = strSql;
string result = cmd.ExecuteScalar().ToString();
clear();
return result;
}
}就是在 getCon 的 conn.Open() 出错
下面是错误提示
===========================================
“/electech”应用程序中的服务器错误。
--------------------------------------------------------------------------------未指定的错误
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 未指定的错误源错误:
行 36: if (conn.State == ConnectionState.Closed)
行 37: {
行 38: conn.Open();
行 39: }
行 40: return conn;
源文件: d:\web\electech\App_Code\DB.cs 行: 38 堆栈跟踪:
[OleDbException (0x80004005): 未指定的错误]
System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +968297
System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +86
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) +29
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +4861516
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +117
System.Data.OleDb.OleDbConnection.Open() +40
DB.getCon() in d:\web\electech\App_Code\DB.cs:38
DB.getScalar(String strSql) in d:\web\electech\App_Code\DB.cs:49
about.Page_Load(Object sender, EventArgs e) in d:\web\electech\about.aspx.cs:30
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
if (conn.State == ConnectionState.Closed)
{
conn.close(); //关闭之后再重新打开!!
conn.Open();
}
{
string dbname = System.Web.HttpContext.Current.Server.MapPath("App_Data/#[email protected]");
string connStr = "PROVIDER=microsoft.ACE.oledb.12.0;Data Source=" + dbname;
conn = new OleDbConnection(connStr);
return conn;
}
这一行不应该就在这里写了
public static object ExecuteScalar(string connectionString, string cmdText, params OleDbParameter[] commandParameters)
{
OleDbCommand cmd = new OleDbCommand();
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
PrepareCommand(cmd, connection, cmdText, commandParameters);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}
}
private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, string cmdText, OleDbParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
cmd.CommandType = CommandType.Text;
if (cmdParms != null)
{
foreach (OleDbParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
权限在临时目录里写文件而产生
看看web.config是否<system.web>
<identity impersonate="true"/>
</system.web>
搞打开你试试
{ string dbname = System.Web.HttpContext.Current.Server.MapPath("App_Data/#[email protected]"); string connStr = "PROVIDER=microsoft.ACE.oledb.12.0;Data Source=" + dbname;
conn = new OleDbConnection(connStr);
}
public void getCon()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
} 这样写试试