Vb.net 当我在DataGrdiView中添加一行时,我得到“连接未关闭。连接的当前状态为打开”

Vb.net 当我在DataGrdiView中添加一行时,我得到“连接未关闭。连接的当前状态为打开”,vb.net,datagridview,sqlconnection,Vb.net,Datagridview,Sqlconnection,我有一个未绑定的datagridview,它是从MS SQL Server数据库填充的。 在从DB读取信息并将行添加到datagridview1的循环过程中,我收到以下消息:“连接未关闭。连接的当前状态为打开” “这是代码 这是可怕的,原因有很多。为什么在此表单上使用来自其他表单的开放连接?您应该在需要的地方和时间创建、打开和关闭连接。在一个表单上保持连接打开,而在另一个表单中使用它们是不好的。除此之外,为什么要首先填充这样的网格?创建数据读取器,将其绑定到BindingSource并将其绑定到

我有一个未绑定的datagridview,它是从MS SQL Server数据库填充的。 在从DB读取信息并将行添加到datagridview1的循环过程中,我收到以下消息:“连接未关闭。连接的当前状态为打开”

“这是代码


这是可怕的,原因有很多。为什么在此表单上使用来自其他表单的开放连接?您应该在需要的地方和时间创建、打开和关闭连接。在一个表单上保持连接打开,而在另一个表单中使用它们是不好的。除此之外,为什么要首先填充这样的网格?创建数据读取器,将其绑定到BindingSource并将其绑定到网格。完成!在@jmcillhinney说了这么多之后,你们应该读一读,然后搜索为什么串接字符串来形成sql命令是另一种灾难的方法。要搜索的术语是Sql InjectionFinally,如果在添加行时出现问题,那么应该注意,此时连接是打开的。这可能意味着您在RowsAdded事件中有一些代码试图再次使用连接,而不考虑连接的打开状态。现在请重新阅读第一条注释并搜索Using语句。。结束对Connection、SqlCommand和SqlDataReader使用方法,这样所有打开的资源都将关闭,这样您就不必处理从DataReader之类的剩余开放资源派生的异常了。由于许多原因,这非常可怕。为什么在此表单上使用来自其他表单的开放连接?您应该在需要的地方和时间创建、打开和关闭连接。在一个表单上保持连接打开,而在另一个表单中使用它们是不好的。除此之外,为什么要首先填充这样的网格?创建数据读取器,将其绑定到BindingSource并将其绑定到网格。完成!在@jmcillhinney说了这么多之后,你们应该读一读,然后搜索为什么串接字符串来形成sql命令是另一种灾难的方法。要搜索的术语是Sql InjectionFinally,如果在添加行时出现问题,那么应该注意,此时连接是打开的。这可能意味着您在RowsAdded事件中有一些代码试图再次使用连接,而不考虑连接的打开状态。现在请重新阅读第一条注释并搜索Using语句。。结束使用带有Connection、SqlCommand和SqlDataReader的方法,以便关闭所有打开的资源,这样您就不必处理从DataReader等剩余打开的资源派生的异常
Private Sub ShowMSR_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim col As New CalendarColumn() With {.HeaderText = "ROS Date"}
            DataGridView1.Columns.Insert(5, col)
            Dim col_1 = New DataGridViewTextBoxColumn
            col_1.Name = "Date"
            DataGridView1.Columns(5).DefaultCellStyle.Format = "dd/MM/yyyy"

            Dim strsqlcommand As String = "SELECT * FROM MSR Where MSR_ID='" & MSRID & "'"
            Dim dr As SqlDataReader
            Dim sqlcommand = New SqlCommand(strsqlcommand, Form1.SQL_conn)


            Dim itemcode As String = ""
            Dim Desc As String = " "
            Dim qty As String = " "
            Dim un As String = " "
            Dim AC As String = ""
            Dim comm As String = ""

                 Dim rdate As Date
                strsqlcommand = "Select Item_Code, Quantity, Unit, Item_Description, AC_No, ROS_time, Coment_RO From ITEMS Where MSR_ID
= '" & MSRID & "'"
                sqlcommand.CommandText = strsqlcommand
                dr = sqlcommand.ExecuteReader()
                While dr.Read()
                    itemcode = dr(0).ToString
                    qty = dr(1).ToString
                    un = dr(2).ToString
                    Desc = dr(3).ToString
                    AC = dr(4).ToString
                    If IsDBNull(dr(5)) Then
                        rdate = CDate("1990/1/1")
                    Else
                        rdate = CDate(dr(5))
                    End If

                    comm = dr(6).ToString

                    Dim row As String() = New String() {itemcode, qty, un, Desc, AC, rdate, comm}
                    Me.DataGridView1.Rows.Add(row) '<---Here occur the problem 

                End While

                dr.Close()

                If (Form1.SQL_conn.State = ConnectionState.Open) Then Form1.SQL_conn.Close()

            Catch ex As Exception
              ' the exception is never triggered 
                MsgBox(ex.Message)
                If (Form1.SQL_conn.State = ConnectionState.Open) Then Form1.SQL_conn.Close()
            End Try
        End Sub