当前位置: 代码迷 >> VB Dotnet >> 报错提示已经开启一个与这个command相关的datareader
  详细解决方案

报错提示已经开启一个与这个command相关的datareader

热度:259   发布时间:2016-04-25 01:59:58.0
出错提示已经开启一个与这个command相关的datareader
本帖最后由 allbluekos 于 2015-09-24 15:32:05 编辑
在点按钮2的时候出现这个问题,怀疑是不是在加载窗体的时候已经打开链接,但是我也是有关闭,网上找了快一个星期了,实在没有办法,整页代码贴上,求大神指教。
Public Class CollectData
    Dim mycon As Myconn = New Myconn() '调用SqlConnection的Myconn类实例化
    Dim mycom As New SqlClient.SqlCommand
    Dim dt As New DataTable()
    Private Sub CollectData_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        dt.Columns.Add("身份ID")
        dt.Columns.Add("年")
        dt.Columns.Add("月")
        dt.Columns.Add("日")
        dt.Columns.Add("时间")
        dt.Columns.Add("设备号")
        dt.Columns.Add("标准时间")

        Dim myadapter As New SqlClient.SqlDataAdapter
        Dim mytable As New DataTable
        mycom.CommandText = "select * from kq_RecordRead"
        mycom.Connection = mycon.conn
        Try
            mycon.conn.Open()
            myadapter.SelectCommand = myCom
            myadapter.Fill(mytable)
            DataGridView2.DataSource = mytable
            DataGridView2.Columns(0).HeaderText = "流水号"
            DataGridView2.Columns(1).HeaderText = "名称"
            DataGridView2.Columns(2).HeaderText = "开始位置"
            DataGridView2.Columns(3).HeaderText = "截取长度"
            DataGridView2.Columns(0).ReadOnly = True
            DataGridView2.Columns(1).ReadOnly = True
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            mycon.conn.Close()
        End Try
    End Sub
 Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        If DataGridView1.Rows.Count > 0 Then
            Dim i As Integer
            For i = 0 To DataGridView1.Rows.Count - 1
                Dim a0 As String = DataGridView1.Rows(i).Cells(0).Value.ToString
                Dim a1 As String = DataGridView1.Rows(i).Cells(5).Value.ToString
                Dim a2 As String = DataGridView1.Rows(i).Cells(6).Value.ToString
                mycom.CommandText = "insert into kq_record(orID,orIOtime,orMachine) values ('" & a0 & "',convert(datetime,'" & a2 & "'),'" & a1 & "')"
                mycom.Connection = mycon.conn
                Try
                    mycon.conn.Open()
                    Dim mysqlreader As SqlClient.SqlDataReader = mycom.ExecuteReader
                    mycom.ExecuteNonQuery()
                Catch ex As Exception
                    MsgBox(ex.ToString)
                Finally
                    mycon.conn.Close()
                End Try
            Next
        End If
    End Sub

------解决思路----------------------
datareader需要显式关闭的,不是command的问题,不过你弄reader干嘛?
------解决思路----------------------
dr.Closed()你这行可以直接删掉,因为你下面有executenonquery方法
  相关解决方案