asp.net 经常无法访问数据库!
当前网站使用的DBHelper.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
/*********************************
* 类名:DBHelper
* 功能描述:提供数据访问基础操作
* ******************************/
namespace MyVodDAL
{
public class DBHelper
{
private static string connectionString = ConfigurationManager.ConnectionStrings["MyVodConnectionString"].ConnectionString;
private static SqlConnection con = new SqlConnection(connectionString);
private static SqlConnection con1 = new SqlConnection(connectionString);
/// <summary>
/// 查询表信息
/// </summary>
/// <param name="sql">查询语句</param>
/// <returns>DataTable表</returns>
public static DataTable GetData(string sql)
{
//判断如果第一个SqlConnection正在使用中则使用另外一个
if (con.State == ConnectionState.Open)
{
SqlDataAdapter sda = new SqlDataAdapter(sql, con1);
DataTable dt = new DataTable();
try
{
sda.Fill(dt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
sda.Dispose();
con1.Close();
}
return dt;
}
else
{
SqlDataAdapter sda = new SqlDataAdapter(sql, con);
DataTable dt = new DataTable();
try
{
sda.Fill(dt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
sda.Dispose();
con.Close();
}
return dt;
}
}
/// <summary>
/// 执行无参SQL语句,返回影响行数
/// </summary>
/// <param name="sql">查询语句</param>
/// <returns>返回影响行数</returns>
public static int ExecuteNonQuery(string sql)
{
int result = 0;
SqlCommand com = new SqlCommand(sql, con);
try
{
con.Open();
result = com.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
com.Clone();
con.Close();
}
return result;
}
/// <summary>
/// 执行无参数SQL语句,返回第一行的第一列
/// </summary>
/// <param name="sql">查询语句</param>
/// <returns>首行首</returns>
public static int ExecuteScalar(string sql)
{
int result = 0;
SqlCommand com = new SqlCommand(sql, con);
try
{
con.Open();
result = int.Parse(com.ExecuteScalar().ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
com.Clone();
con.Close();
}
return result;
}
}
}
错误页面!!!
目前解决办法:
IIS管理器 对应“应用程序池”右键回收
网站刷新就正常了!!!!!!!!!!
请高手帮忙看看什么原因啊~~~~~~~
--------------------编程问答-------------------- 个人认为最好是方法内实例化SqlConnection对象,也就是在每次需要连接数据库的时候实例化SqlConnection对象,用完之后马上释放资源,还有,你的GetData方法判断的con,而你的方法用的是con1的连接对象,不太清楚你这样写有什么特别的用意。 --------------------编程问答--------------------
用法是先判断 con 是否已经打开~~如果打开着那我用另外一个con1做连接
--------------------编程问答-------------------- 你这写比较有问题,特别是比较多用户诘问的时候,很可能会打开大量的连接,而导致达到数据库连接上限而拒绝连接,这就是为什么你对应“应用程序池”右键回收之后又能访问的原因。 --------------------编程问答--------------------
实例化SqlConnection对象
用好就Close这个会达到数据库连接上线吗??
如果不会出现这样的 错误的话我尝试下~~~ --------------------编程问答-------------------- 既然这样写有问题就换个写法吧 写法多的很
--------------------编程问答--------------------
private static SqlConnection con = new SqlConnection(connectionString);
private static SqlConnection con1 = new SqlConnection(connectionString);
静态的Connection对象,非常有问题,你想想多人差不多同时访问的时候,会出现
A页面要访问数据库,找开了连接,它做的事情比较多,比如要3秒完成操作,这时,
B页面差不多同时被请求,它做的事情比较少,只要1秒,它做完事情后关闭了连接,
这时A会怎么样呢? --------------------编程问答--------------------
private static SqlConnection con = new SqlConnection(connectionString);
private static SqlConnection con1 = new SqlConnection(connectionString);
静态的Connection对象,非常有问题,你想想多人差不多同时访问的时候,会出现
A页面要访问数据库,找开了连接,它做的事情比较多,比如要3秒完成操作,这时,
B页面差不多同时被请求,它做的事情比较少,只要1秒,它做完事情后关闭了连接,
这时A会怎么样呢? --------------------编程问答-------------------- 进来学习下! --------------------编程问答-------------------- 顶6楼 --------------------编程问答-------------------- 用lingq很方便的也好用并且他还能检查出数据库的一些错误
补充:.NET技术 , ASP.NET