这是什么问题?
我的 数据库 连接字符串写在 web.config里面
我每次 conn.open 的时候,用完也就关掉了
用的sqldataadapter 用完以后也就关掉了
为什么还是出现这种情况??
我的 数据库 连接字符串写在 web.config里面
我每次 conn.open 的时候,用完也就关掉了
用的sqldataadapter 用完以后也就关掉了
为什么还是出现这种情况??
解决方案 »
- 找高手,用代码解决
- Repeater 控件中绑定数据的值,能否取出来,加入小脚本运算?
- 为什么我的IIS7的网站中的“模块”中的“配置本机模块”没有“注册”按钮
- 求网页防复制代码
- ******Ajax实现的留言本本,包含无刷新分页,无刷新登陆,删除,回复等技术,大家瞅瞅提点意见******
- 数据库查询问题能答上来的就是牛!
- 关于asp.net中的加,减,乘,除的运用!~~
- 为啥不能调试呢?????
- 一个关于Session的问题
- 请教[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)] 中的NCBCONST.NCBNAMSZ是什么东东,怎么解释?
- VS2003里无法进行F5调试!
- 诚邀asp编程高手!!!
timeout=200
默认是30秒
这是什么问题?
我的 数据库 连接字符串写在 web.config里面
我每次 conn.open 的时候,用完也就关掉了
用的sqldataadapter 用完以后也就关掉了
为什么还是出现这种情况??
————————————————————————————————————————
说明还是没有关掉。
对了,那个 sqlcommand 对象 用完了也得手动关掉吗
用了 SqlParameter 这个对象,这个我没关闭,这个不用关闭吗?
/// Create DataBase
/// </summary>
/// <returns>Is Successful?</returns>
private bool CreateDataBase(string SqlFileName, string connStr)
{
if (NeedBreak)
return false; // T-SQL文件名
string fileName = MapPath(string.Format("App_Data\\{0}.sql", SqlFileName));
// 超时时间
int timeout = 600; bool Issuccess = true;
SqlConnection conn = null;
try
{
Add_Info(String.Format("启用{0}建立过程...", SqlFileName)); // read file
using (StreamReader sr = new StreamReader(new FileStream(fileName, FileMode.Open)))
{
Add_Info("建立数据..."); // 创建一个新的链接
conn = new SqlConnection(connStr); conn.Open(); while (!sr.EndOfStream)
{
StringBuilder sb = new StringBuilder();
SqlCommand cmd = conn.CreateCommand(); while (!sr.EndOfStream)
{
string s = sr.ReadLine();
if (s != null && s.ToUpper().Trim().Equals("GO"))
{
break;
} sb.AppendLine(s);
} // 执行T-SQL语句
cmd.CommandText = sb.ToString();
cmd.CommandTimeout = timeout; cmd.ExecuteNonQuery();
} }
Add_Info(string.Format("结束{0}数据建立过程...", SqlFileName));
} catch (Exception ex)
{
bWaitRes = 3;
Add_Info(String.Format("建立数据库中出错: {0}", ex.ToString()));
Issuccess = false;
}
finally
{
// 关闭链接
if (conn != null)
{
try
{
conn.Close();
conn.Dispose();
}
catch (Exception e)
{
bWaitRes = 3;
Add_Info(String.Format(@"关闭链接失败:{0}", e.ToString()));
Issuccess = false;
}
}
}
return Issuccess;
}
总结一小下:
1.ExecuteReader(CommandBehavior.CloseConnection)加上CommandBehavior.CloseConnection;
2.最好不要返回一个DataReader,读完数据库close,然后返回一个DataTable或List<>,或其它
3.一个页面最好少new sqlconnection
4.配置好服务器
5.重写DataReader....
using(objconn = new SqlConnection(....)){}
using(cmd = new SqlCommand(....)){}
using(adapter= new SqlDataAdapter(....)){}这样我多余么?呵呵,我把用完能释放掉的资源全释放掉了
还有 我新建一个 dataSet 用完后,用不用 手动 ds.clear()?
1 修改几个关键页面或访问比较频繁的数据库访问操作,使用DataAdapter和DataSet来获取数据库数据,不要使用DataReader。
2 在访问数据库的页面上使用数据缓存,如果页面的数据不是经常更新(几分钟更新一次)的话,使用Cache对象可以不用访问数据库而使用缓存中的内容,那么可以大大减少连接数量。
3 修改代码,把使用Connection对象的地方都在Close()后面加上Dispose()调用。
4 建议对数据库操作进行大的修改,建立自己的数据库操作代理类,继承System.IDisposable接口,强迫释放资源,这样就不会出现连接数量不够的问题了。解决方案二解决方法(*):WEB.config 里面:在数据库连接加 Max Pool Size = 512;server=local;uid=;pwd=;database=2004;Max Pool Size = 512;">一劳永逸。解决方案三估计是连接(Connection)对象没有Close。倒是不必Dispose,而DataReader用完后应该关闭,但不关闭也没问题,只是不关闭的话此连接对象就一直不能用,只要你最终关闭了连接对象就不会出问题。
连接对象在Open后的操作都放在try块中,后面跟一个finally块:conn.Close();
好错了吧,是没有释放,但是又放回链接池了,201号用户可以用了。你是不是热迷乎了???