連接未關閉。該連接的當前狀態是開放的連接未關閉。連接的當前狀態爲打開 - 嘗試關閉所有內容
我意識到這個問題張貼了很多次,雖然我研究了它的死亡,並嘗試了大多數的一切,我仍然無法解決如何解決。我見過的所有東西都說要關閉我的聯繫,但我覺得我已經以不同的方式完成了這些。我不知道這是否是我最終的編碼問題(請給我指點或建議),或者它是服務器配置問題(我不知道如何檢查)。似乎有一次我遇到了錯誤,那麼其他頁面無法工作一段時間。如果不止一個用戶同時點擊一個頁面,這種情況會持續發生 - 它實際上會佔用整個網站。如果我打開其他瀏覽器並打開頁面,我可以自己重新創建。我無法在通過Visual Studio在本地工作時重新創建(這就是爲什麼我想知道它是否是IIS配置)。
在這段代碼中,我可以做些什麼來確保連接已關閉,以便其他人可以重用?和/或有另一種方式來處理錯誤,以便用戶可以再試一次,而不是把一切都放下?
謝謝大家!
下面的例子是我所擁有的一個shell,但它導致了這個問題。他們略有不同,因爲我嘗試過各種方式從本網站的例子開始工作。
============================================== ====================
後面的代碼:
Imports System.Data.SqlClient
Imports System.Data
Imports System.Web.UI.WebControls.DataControlField
Partial Class test_testConnections
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
LoadMetricDatesToDropDown()
loadMetricWorkstreamsToDropDown()
End If
End Sub
Sub LoadMetricDatesToDropDown()
Dim draftbit As Boolean = False
ddlDtSelector.Items.Clear()
Using oConn As New SqlConnection(ConfigurationManager.ConnectionStrings("aid1564conn").ConnectionString)
Using cmd As New SqlCommand("usp_DSBR_Date_Selections", oConn)
cmd.CommandType = CommandType.StoredProcedure
oConn.Open()
Using dr As SqlDataReader = cmd.ExecuteReader()
If dr.HasRows Then
While dr.Read
Dim li As New ListItem()
If dr("dt_status").ToString.ToUpper = "DRAFT" Then
li.Text = dr("Metric_Dt") & " (draft)"
draftbit = True
Else
li.Text = dr("metric_dt")
End If
li.Value = dr("Metric_dt")
ddlDtSelector.Items.Add(li)
End While
End If
End Using
End Using
End Using
If draftbit = True Then ddlDtSelector.SelectedIndex = 1
End Sub
Sub loadMetricWorkstreamsToDropDown()
Using oConn As New SqlConnection(ConfigurationManager.ConnectionStrings("aid1564conn").ConnectionString)
Using cmd As New SqlCommand("usp_DSBR_Get_Workstreams", oConn)
cmd.CommandType = CommandType.StoredProcedure
oConn.Open()
Using dr As SqlDataReader = cmd.ExecuteReader()
If dr.HasRows Then
While dr.Read
Dim li As New ListItem()
li.Text = dr("workstream_Name")
li.Value = dr("workstream_id")
workstreams.Items.Add(li)
End While
End If
End Using
End Using
End Using
End Sub
End Class
================ ==================================================
頁
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="testConnections.aspx.vb" Inherits="Test_testConnections" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="ddlDtSelector" runat="server" AutoPostBack="true"></asp:DropDownList>
<asp:DropDownList ID="workstreams" runat="server" AutoPostBack="true"></asp:DropDownList>
<a href="testConnections.aspx">go</a>
</div>
</form>
</body>
</html>
我不認爲上面的代碼可能會打開連接。 (這兩個oConn是兩個完全不相關的對象)你確定你在這段代碼中有錯誤嗎?如果是,在哪一行? – Steve
有時我收到「連接未關閉」錯誤,我同意這種錯誤沒有意義,因爲我覺得我正在關閉一切。一旦錯誤發生,那麼其他錯誤也會發生。後來的錯誤是當它試圖填充下拉列表 - 我不明白,因爲我有在裏面的「hasrows」,如果沒有行,那麼它不應該那裏......?你有什麼建議我幫忙檢查一下嗎?謝謝你的迴應,史蒂夫! – user2820595
也許別的東西導致了這個問題。你到處看過(所有頁面),確保連接已關閉?我沒有時間詳細檢查這一點,但搜索連接池設置。您可以在連接字符串中設置多少連接到數據庫的同時打開。也許你需要將它設置爲1。 –