高手留步:静态变量的并发使用问题

jonas401 2005-11-01 04:42:10
问题基础:
我在数据层访问的基类中定义一个静态变量conn , 类型为SqlConnection:
private static SqlConnection conn ;

然后声明一个属性:
public static SqlConnection Conn
{
get
{
if ( conn == null )
{
conn = new SqlConnection( strConn ) ;
}

return conn ;
}
}



问题描述:
我这样管理数据库结对象合理吗?会不会有并发访问的冲突?


环境:
SDK 1.1
IIS 5.0
...全文
235 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jonas401 2005-11-01
  • 打赏
  • 举报
回复



问题已经明白了,结帖
ChengKing 2005-11-01
  • 打赏
  • 举报
回复
这个连接应该不能并发,除非一直打开不关闭.

多个用户共享好像不行吧.
pupo 2005-11-01
  • 打赏
  • 举报
回复
你的错误就是这个引起的
pupo 2005-11-01
  • 打赏
  • 举报
回复
用连接池或者用的时候建立连接,用完关掉
jonas401 2005-11-01
  • 打赏
  • 举报
回复
<!--错误信息:已有打开的与此连接相关联的DataReader,必须首先将它关闭。

错误对象:System.Data
错误方法Void ValidateCommand(System.String, Boolean)
错误实例:

错误连接:

堆表示形式:
at System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean executing)

at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream)

at System.Data.SqlClient.SqlCommand.ExecuteReader()

at MemberWeb.Dal.SqlHelper.ExecuteReader(SqlConnection connection, SqlTransaction transaction, CommandType commandType, String commandText, SqlParameter[] commandParameters,SqlConnectionOwnership connectionOwnership)

at MemberWeb.Dal.SqlHelper.ExecuteReader(SqlConnection connection, CommandType commandType, String commandText, SqlParameter[] commandParameters)

at MemberWeb.Dal.IDns.GetDnsInfo(String Url)

--->


这段异常代码是否跟本帖有问题相关呢?
一次出错中记录下来的
jonas401 2005-11-01
  • 打赏
  • 举报
回复
看了这么多,受益了

希望能有更多的讨论
cw888 2005-11-01
  • 打赏
  • 举报
回复
使用连接池
SqlDataAdapter 2005-11-01
  • 打赏
  • 举报
回复
不能并发,会出异常的。
zhy0101 2005-11-01
  • 打赏
  • 举报
回复
还有,Connection对象不能并发使用。
zhy0101 2005-11-01
  • 打赏
  • 举报
回复
在第一次访问属性的时候会构建对象,可能会有冲突
JadyWang 2005-11-01
  • 打赏
  • 举报
回复
你说的工作还是让connection pool帮你做吧……
jonas401 2005-11-01
  • 打赏
  • 举报
回复
TO : JasonHeung(拥有一切也不过就这样笑着哭)
这样做会有什么后果呢?

再打比方,我多建立几个静态的conn1 ,conn2 ,conn3
判断,如果conn的连接已经被打开,即正在被使用时,我启用conn1
依此类推,这样是否可行呢?
jiezhi 2005-11-01
  • 打赏
  • 举报
回复
不是好的做法.
数据库连接是非托管资源,应该及时释放.
jonas401 2005-11-01
  • 打赏
  • 举报
回复
至于是否关闭的问题,在后面的使用的程序中去控制
JasonHeung 2005-11-01
  • 打赏
  • 举报
回复
在网站上多用户访问不能这么做!
必须要每次建立一个新连接;
或者使用连接池,就是一个已经建立的连接列表,需要时就从里面取出一个连接来,使用完再放回到池中。不够用时就新增连接加到连接池中。
moodboy1982 2005-11-01
  • 打赏
  • 举报
回复
没试过。
但有个问题。要是前面的链接没关呢?那就就连不了?

110,549

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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