sqlHelper.cs中使用单例

qq22345111 2011-11-12 12:13:41
突然温习设计模式的时候,想了下把sqlHelper.cs做成了一个单例
然后把所有的静态方法全部修改了!

请大家指导下,这样会在多用户访问的时候,出现问题吗?
如有更好答案,期待您的答复!

 //从web.config文件中获得数据库连接字符串
private static string sqlStr = System.Configuration.ConfigurationManager.ConnectionStrings["TestConnectionString"].ToString();

public static SqlConnection con = null;
public static object obj = null;

//单例模式
private static volatile SqlHelp sqlInstance;
private SqlHelp() { }
private static object lockHelper = new object();
public static SqlHelp SqlInstane()
{

if (sqlInstance == null)
{
lock (lockHelper)
{
if (sqlInstance == null)
{
sqlInstance = new SqlHelp();
}
}
}
return sqlInstance;
}



/// <summary>
/// 数据添加或修改方法
/// </summary>
/// <param name="sql">T-SQL语句</param>
/// <returns>int,影响的行数</returns>
public int UpdateORInsert(string sql)
{
此处略过!!
}
}
...全文
243 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿非 2011-11-12
  • 打赏
  • 举报
回复
很直观的两个问题,一是静态的连接对象,二是lock
qq22345111 2011-11-12
  • 打赏
  • 举报
回复
请问为什么呢?
阿非 2011-11-12
  • 打赏
  • 举报
回复
赶紧改回去吧
on1y_1onely 2011-11-12
  • 打赏
  • 举报
回复
小心 类中的私有属性
showjim 2011-11-12
  • 打赏
  • 举报
回复
数据库连接的单例只应该出现在单线程的程序中,如果多线程同时访问需要加锁,而加锁就无法充分利用系统资源。
showjim 2011-11-12
  • 打赏
  • 举报
回复
如果楼主是为了学习与理解单例,这种做法无可厚非。
其实楼主的单例,效率上没什么大问题,因为Lock的影响只存在于第一次创建实例的并发情况下,而实例与静态之间的差别基本可以忽略(实际上根本没必要纠结,除非是个极端完美主义者,当然我自己就很极端)。
如果是实际使用的话,C#中的单例可以在静态构造中实现,简单并且高效。

静态与动态之间的取舍,在于是否需要抽象,否则只是一个没有意义的细节问题。
qgqch2008 2011-11-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 aspnetchengxu 的回复:]
可以用静态方法,
Public static SqlConnection Conn()
{
return new SqlConnection(ConfigurationManager.ConnectionStrings[ "ConnectionString "].ToString(););
}
不能用静态链接对象,你让所有的操作都用一个数据库链接,想象一下就只到了,
loc……
[/Quote]學習了
缪军 2011-11-12
  • 打赏
  • 举报
回复
Gof所谓的单例模式本质就是:控制实例的数量
当多线程处理的时候,就会引出并发问题


Gof的害人之处在于:撇开OOAD谈论OOPL,这就等于是刻舟求剑,
而另一方面,很多人以为学个三招鲜就能掌握OOAD,甚至他们根本就分不清两者的区别

设计能力需要靠多年的实践和各种碰壁弯路去积累,没有速成方法
ASPNETCHENGXU 2011-11-12
  • 打赏
  • 举报
回复
可以用静态方法,
Public static SqlConnection Conn()
{
return new SqlConnection(ConfigurationManager.ConnectionStrings[ "ConnectionString "].ToString(););
}
不能用静态链接对象,你让所有的操作都用一个数据库链接,想象一下就只到了,
lock就更不用说了
CalvinR 2011-11-12
  • 打赏
  • 举报
回复
你乱改的话 出错在哪儿了你都会不知道!
别人的成功试验 不会比你一会改的差
GooKit 2011-11-12
  • 打赏
  • 举报
回复
學習

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧