请问在类里写一个静态连接sqlconnection的办法是否合适?

skyaspnet 2009-02-02 11:52:43
请问在类里写一个静态连接sqlconnection的办法是否合适?

  例如: public class connClass
{
public static SqlConnection conn = new SqlConnection("数据库连接字符串");

// 其他代码
}

调用: connClass.conn.Open();

connClass.conn.Close();

如果不合适,请问用什么办法比较好,谢谢!
...全文
446 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
幽冥之都 2011-04-06
  • 打赏
  • 举报
回复
原来是这样,吓死我了
skyaspnet 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 hubblebubblepig 的回复:]

那如果这个静态变量仅做传递使用呢?
就比如在最开始的时候从配置文件里面读出连接字符串来赋值给一个静态变量
然后在每次用到的时候再把这个静态变量的值赋给一个新定义的变量来使用...
这样总会比每次都去读配置文件要好些吧?

线程安全 并不只是说线程之间不可以有共享的东西吧
[/Quote]

作基本数据类型变量是可以的,但是作为对象来使用就会有问题,特别是数据库连接这样的对象
winner2050 2009-02-03
  • 打赏
  • 举报
回复
不可以的。

我记得我以前写的程序被人家严厉批评了。

会有线程安全问题,而且无法使用事务。
sunshine_anycall 2009-02-03
  • 打赏
  • 举报
回复
使用单件模式,这样初始化好了SqlConnection的话就不用在每次使用的都时候都初始化SqlConnection了
sunshine_anycall 2009-02-03
  • 打赏
  • 举报
回复
可以
        private static SqlConnection _conn = null;

public static SqlConnection Connection
{
get
{
if (_conn == null)
_conn = new SqlConnection();
return _conn;
}

}
koukoujiayi 2009-02-03
  • 打赏
  • 举报
回复
没什么不可以!完全可以!!
qas1234 2009-02-03
  • 打赏
  • 举报
回复
可以
CrystalofAA 2009-02-03
  • 打赏
  • 举报
回复

改一下!

private static object obj = new object();
private static SqlConnection _conn = null;
private static int nCount= 0;

public static SqlConnection Connection
{
get
{
lock(obj)
{
if (_conn == null && nCount<10)
{
_conn = new SqlConnection();
nCount++;
}

return _conn;
}
}

}
sxmonsy 2009-02-03
  • 打赏
  • 举报
回复
当然行了.我一般都这写.
skyaspnet 2009-02-03
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 jinjazz 的回复:]
引用 24 楼 sunshine_anycall 的回复:
多线程为什么就不可以?
BatchFile codeprivate static object obj=new object();private static SqlConnection _conn=null;public static SqlConnection Connection
{
get
{
lock(obj){if(_conn==null)_conn=new SqlConnection();return_conn;}
}

}

数据库链接做lock,那还有意义吗?永远只有一个人能访问数据库,其他人都去排队了。
[/Quote]

确实是这样
jinjazz 2009-02-03
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 sunshine_anycall 的回复:]
多线程为什么就不可以?
BatchFile codeprivate static object obj=new object();private static SqlConnection _conn=null;public static SqlConnection Connection
{
get
{
lock(obj){if(_conn==null)_conn=new SqlConnection();return_conn;}
}

}
[/Quote]
数据库链接做lock,那还有意义吗?永远只有一个人能访问数据库,其他人都去排队了。
sunshine_anycall 2009-02-03
  • 打赏
  • 举报
回复
多线程为什么就不可以?
[code=BatchFile]
private static object obj = new object();
private static SqlConnection _conn = null;

public static SqlConnection Connection
{
get
{
lock(obj)
{
if (_conn == null)
_conn = new SqlConnection();

return _conn;
}
}

}[/code]
qiume 2009-02-03
  • 打赏
  • 举报
回复
除非是单线程,否则不建议使用静态变量......
blackmeit 2009-02-03
  • 打赏
  • 举报
回复
学习了。 做个标记。
zhnzzy 2009-02-03
  • 打赏
  • 举报
回复
楼主可以将此连接写在静态构造函数里面岂不是更好
glt3260053 2009-02-03
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 hz890 的回复:]
引用 11 楼 jinjazz 的回复:
当一个人打开connection的时候其他人是无法使用它的.你自己测试一下就知道了.

的确如此,而且静态成员在某一时刻只能有一种状态:
比如说:
有一个会话打开一个静态连接,并即将执行读写数据库的动作时,如果有另一个已经读写数据库读写的会话执行了关闭该静态连接的动作,就会出现异常,尤其是在一个并发量非常高的Web应用系统这个问题不可忽视...

以上乃个人拙见,在下只有三个三角,水平…
[/Quote]
不推荐如此
skyaspnet 2009-02-03
  • 打赏
  • 举报
回复
hz890

呵呵,大家纯粹是讨论技术,我也是初学者,发现自己很多基础概念模糊,

确实,在我提的这个问题的实际测试中出现了连接共享的错误
hz890 2009-02-03
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jinjazz 的回复:]
当一个人打开connection的时候其他人是无法使用它的.你自己测试一下就知道了.
[/Quote]
的确如此,而且静态成员在某一时刻只能有一种状态:
比如说:
有一个会话打开一个静态连接,并即将执行读写数据库的动作时,如果有另一个已经读写数据库读写的会话执行了关闭该静态连接的动作,就会出现异常,尤其是在一个并发量非常高的Web应用系统这个问题不可忽视...

以上乃个人拙见,在下只有三个三角,水平自然不及楼主,不当之处还请见谅!
hubblebubblepig 2009-02-03
  • 打赏
  • 举报
回复
sorry 原来楼主说的是一个静态的SqlConnection对象 这样肯定是不行的
一般都是用静态的连接字符串来构建SqlConnection对象

private static readonly string _connectionString = 读配置文件获得连接字符串;//这样的好处是只读一次就可以了
...
SqlConnection conn = new SqlConnection(_connectionString);//这个连接要在操作数据库的方法内部来写 也就是每个数据库的操作都对应一个独立的连接对象

有说得不当的地方请大家指出
燥动的心 2009-02-03
  • 打赏
  • 举报
回复
学习。
加载更多回复(11)

62,041

社区成员

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

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

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

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