在编程中。
如果自己封装了 SQLHELPER 。那么最“合适”的方法是什么?我想请问下:成千上万个用户中,假设A、B、C个用户同时访问页面,同时操作了同一个步骤。假设都操作了向数据库添加一条记录(这里不考虑数据库并发)。
那么,我们是要采用【需要时】,还是【永久时】?1、【永久时】会不会引发异常?倘若【添加一条记录】不会引发异常。2、那么多个用户同时进行 ExecuteReader 呢?(一个数据源只能同时拥有一个读取器)
发现自己有太多不了解了。达人,告诉我好吗?
如果自己封装了 SQLHELPER 。那么最“合适”的方法是什么?我想请问下:成千上万个用户中,假设A、B、C个用户同时访问页面,同时操作了同一个步骤。假设都操作了向数据库添加一条记录(这里不考虑数据库并发)。
那么,我们是要采用【需要时】,还是【永久时】?1、【永久时】会不会引发异常?倘若【添加一条记录】不会引发异常。2、那么多个用户同时进行 ExecuteReader 呢?(一个数据源只能同时拥有一个读取器)
发现自己有太多不了解了。达人,告诉我好吗?
解决方案 »
- 我想在数据表中加个冗余字段,方便查询用,有什么弊端吗?谢谢
- 求助一个很久没解决的问题!动态列GridView并且有增、删、改
- 如何在页面上点个按钮后,让这个页面随着我往数据库里插入记录的条数来刷新记录。我的目的就是在页面刷新的时候,让我放的GIF进度条不断
- 在ASP。NET网站中如何提取客户端的的IP地址?
- 关于用按钮控制iframe里面显示的页的变化的问题!
- 请问在创建一个ASP.NET Web Application时出错是怎么回事?
- [馨郁星愿]100T 网站终于换上asp.net版了~欢迎大家指点与批评!!
- E-Mail中的Content-Type,其中multipart/alternative和multipart/related是怎样使用的
- 请问IE的安全配置藏在哪里?
- C# Excel另存为mht文件的问题
- 高分求一个简单的问题答案
- AssemblyInfo.CS使用问题
使用这种方法较好
这样会出现楼主说的问题吗?
public Class SqlOperator
{
private SqlOperator instance = new SqlOperator();
public SqlOperator Instance
{
get
{
return instance;
}
} priavte string connectionString = "***";
public SqlDataReader Runsql(string sql)
{
SqlConnection conn = new SqlConnection(connectionString);
......
return **;
}
}
string sql = "select * from ...";
SqlDataReader reader = SqlOperator.Instance.RunSql(sql);
感觉上个不会。你的单例只是 SqlOperator。我想到一个更好的方法。当千万人来茅坑,来一个我给挖一个,来一个我挖一个……但我把Connection 存放在 Sesstion 里,当发现会话里存有数据源,直接用之前保存的。这样的效果减免实例化的次数,毕竟不大可能,一个人双脚踏双坑。不知这样是否具有可行性?
{
SqlConnection conn = null;
var p = Web.VPage.Current;
if (!p.IsNull() && !p.Session[TempConnectionKey].IsNull())
{
conn = p.Session[TempConnectionKey] as SqlConnection;
if (!conn.IsNull()) return conn;
}
VCore.WriteToDebug("创建了一个数据源。");
conn = new SqlConnection(this._connectionString);
if (!p.IsNull()) p.Session[TempConnectionKey] = conn;
return conn;
}示意代码。
挖茅坑很费时费力的,而且1.受资源(如地皮)限制,挖不了那么多
2.没那么大需求,挖一大批放着就是浪费这些问题,ADO.NET都考虑好了。准备了一批冲水马桶(连接池),用完了赶紧冲水滚蛋(连接放回连接池),其他人好用;
而且有超时机制,霸着马桶不出来,对不起,您超时了(别站着茅坑不拉屎);
如果全满了,对不起,请另找位置(报错:超过最大连接数);
如果你的业务处理快,即使使用同一个连接,也能及时响应,那么应该重复利用同一个连接。节省连接数与建立连接的时间。如果你的业务处理放在SQL服务器上,SQL服务器已经非常繁忙,这个时候即使你开一万个链接还不是得排队等着。
业务是系统的核心,无论什么技术手段还不是为业务服务,抛开业务空谈什么时候技术策略那是纸上谈兵。
我自己也写了个SQL底层类,使用的方法就是执行完一条SQL语句就立即关闭连接,除非操作多表,并使用了事务,那么在完成前连接必须一直占用。