【问题标题】:Invalid attempt to Read when Reader is Closed (VB.Net)阅读器关闭时无效的阅读尝试(VB.Net)
【发布时间】:2017-12-10 19:58:28
【问题描述】:

我目前在我的函数中遇到此错误。情况是我需要向当前日程安排下降的每个客户发送短信,因此我有一个 SQL 查询来选择具有正在进行的日程安排的条目,并且对于 SQL 数据阅读器 (READER) 已读取的每个条目,它将执行我的短信代码。但是我收到了这个错误。

这是我的代码:

Public Function onschedule()
    MysqlConn.ConnectionString = ServerString

    Dim READER As MySqlDataReader
    Dim mobileNum, customername, datestart, msg As String

    Try
        MysqlConn.Open()
        Dim query As String

        query = "SELECT DATE_FORMAT(ratedemand_datestart, '%M %d, %Y') as 'Date Start',ratedemand_contact as 'Contact Number',sales_customername as 'Customer Name' FROM bnb.ratedemand WHERE ratedemand_status = 'Reserved' AND NOW() = ratedemand_datestart AND rate_category='Billiard'"
        COMMAND = New MySqlCommand(query, MysqlConn)
        READER = COMMAND.ExecuteReader

        While READER.Read
            mobileNum = READER.GetString("Contact Number") '09856994598'
            datestart = READER.GetString("Date Start")     'November 2, 2017 12:00 AM'
            customername = READER.GetString("Customer Name") 'Bruce R. Wayne'

            'SMS Code Starts Here'

            If SerialPort.IsOpen Then
                SerialPort.Close()
            End If

            msg = customername + ", this is an automated text from Sta. Lucia East Grand Mall Billiard Hall confirming your 'Billiard Schedule' on " + datestart + " (Right Now). We are reminding you that if you are 20 minutes behind your schedule. It will be automatically cancelled."

            SerialPort.PortName = "COM4"
            SerialPort.BaudRate = 9600
            SerialPort.Parity = Parity.None
            SerialPort.StopBits = StopBits.One
            SerialPort.DataBits = 8
            SerialPort.Handshake = Handshake.RequestToSend
            SerialPort.DtrEnable = True
            SerialPort.RtsEnable = True
            SerialPort.NewLine = vbCrLf
            SerialPort.Open()

            If SerialPort.IsOpen() Then
                SerialPort.Write("AT" & vbCrLf)
                SerialPort.Write("AT+CMGF=1" & vbCrLf)
                SerialPort.Write("AT+CMGS=" & Chr(34) & mobileNum & Chr(34) & vbCrLf)
                SerialPort.Write("Message: " & msg & Chr(26))
            Else
                MetroMessageBox.Show(Admin_Menu, "Port not Available", "System Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End If
        End While

        MysqlConn.Close()

    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        MysqlConn.Dispose()
    End Try

    Return True
End Function

【问题讨论】:

    标签: mysql database vb.net sqldatareader datareader


    【解决方案1】:

    不要低估关闭阅读器的必要性:)

    Try
      While Reader.Read()
        ...
      End While
    Finally
      Reader.Close
      MysqlConn.Close()
    End Try
    

    【讨论】:

    • 我能问一下为什么关闭阅读器会修复我的错误,即阅读器关闭时读取无效?我没有那么多读者
    猜你喜欢
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多