SqlConnection 状态以一种奇怪的方式变化

Posted

技术标签:

【中文标题】SqlConnection 状态以一种奇怪的方式变化【英文标题】:SqlConnection State Change in a strange way 【发布时间】:2013-06-12 07:26:08 【问题描述】:

我有我的 SqlConnection:

        this._sqlConnection = new SqlConnection(sCxn);
        this._sqlConnection.StateChange += new StateChangeEventHandler(_sqlConnection_StateChange);

这就是捕捉连接状态变化事件的方法:

    void _sqlConnection_StateChange(object sender, StateChangeEventArgs e)
    
        this._previousState = e.OriginalState;
        this._connectionState = e.CurrentState;
        log.WriteLog("Connection change status: previous " + e.OriginalState.ToString() + ", current " + e.CurrentState.ToString(), log.INFO);
    

当我在正常的应用程序活动期间切断连接时,我的方法得到了正确的响应:

连接更改状态:之前的打开,当前的关闭

但是当我重新激活连接(启动数据库服务)时,我开始得到这个事件序列:

09.10.41:连接更改状态:以前关闭,当前打开 09.10.41:连接更改状态:以前打开,当前关闭 09.10.51:连接更改状态:以前关闭,当前打开 09.10.51:连接更改状态:之前打开,当前关闭 09.11.01:连接更改状态:以前关闭,当前打开 09.11.01:连接更改状态:以前打开,当前关闭 09.11.12:连接更改状态:以前关闭,当前打开 09.11.12:连接更改状态:之前打开,当前关闭

应用可以查询数据库,但连接状态一直处于关闭状态。

我做错了什么?

提前致谢, 塞缪尔

【问题讨论】:

你是如何查询数据库的? Linq-to-sql 会自动打开和关闭连接。 【参考方案1】:

请阅读连接池。这是学习如何充分利用它的一个很好的参考: http://www.connectionstrings.com/Articles/Show/connection-pooling

从链接复制:

确保您的连接每次都使用相同的连接字符串。 仅当连接字符串相同时,连接池才有效。 如果连接字符串不同,则将是一个新连接 打开。 仅在需要时才打开连接,而不是之前。 使用完后立即关闭连接。 如果连接没有被使用,请不要打开它。 确保在关闭连接之前删除所有临时对象。 确保在关闭连接之前关闭所有用户定义的事务。 如果您想利用连接,请不要使用应用程序角色 池化。

【讨论】:

谢谢,这就是打开和关闭连接的原因。

以上是关于SqlConnection 状态以一种奇怪的方式变化的主要内容,如果未能解决你的问题,请参考以下文章

Android:裁剪位图(以一种奇怪的方式)

以一种奇怪的方式触地射击

QStandardItem 以一种奇怪的方式插入行

为啥我的文本字符串以一种奇怪的方式换行? (HTML/CSS)

我有一个删除插入CTE以一种奇怪的方式失败

iOS Swift - Google Place API (Web) 以一种奇怪的格式返回 JSON