-1

mySqlDataReader.Read が最後のレコードにスタックし、EOF ではない理由を混乱させました..

executeSql のプライベート関数は次のとおりです。

Private Function executeSQL(ByVal str As String, ByVal connString As String, ByVal returnRecordSet As Boolean) As Object
    Dim cmd As Object
    Dim objConn As Object
    Try
        If dbType = 2 Then
            cmd = New MySqlCommand
            objConn = New MySqlConnection(connString)
        Else
            cmd = New OleDbCommand
            objConn = New OleDbConnection(connString)
        End If
        'If objConn.State = ConnectionState.Open Then objConn.Close()
        objConn.Open()
        cmd.Connection = objConn
        cmd.CommandType = CommandType.Text
        cmd.CommandText = str
        If returnRecordSet Then
            executeSQL = cmd.ExecuteReader()
            executeSQL.Read()
        Else
            cmd.ExecuteNonQuery()
            executeSQL = Nothing
        End If
    Catch ex As Exception
        MsgBox(Err.Description & " @ExecuteSQL", MsgBoxStyle.Critical, "ExecuteSQL")
    End Try
End Function

そして、これはエラーが発生した場所でそれを呼び出すための私のサブです:

Using admsDB As MySqlConnection = New MySqlConnection("server=" & rs("server") & ";uid=" & rs("user") & ";password=" & rs("pwd") & ";port=" & rs("port") & ";database=adms_db;")
                    admsDB.Open()
                    connDef.Close()
                    rs.Close()
                    'get record on admsdb
                    Dim logDate As DateTime
                    Dim str As String
                    str = "select userid, checktime from adms_db.checkinout in_out where userid not in (select userid " &
                        "from adms_db.checkinout in_out join (select str_to_date(datetime,'%d/%m/%Y %H:%i:%s') tgl, fid from zsoft_bkd_padang.ta_log) ta " &
                        "on ta.fid=userid and tgl=checktime)"
                    Dim rsAdms As MySqlDataReader = executeSQL(str, admsDB.ConnectionString, True)
                    Dim i As Integer
                    'This is where the error is, datareader stuck on the last record and doesnt EOF
                    While rsAdms.HasRows
                        'i = i + 1 
                        logDate = rsAdms(1)
                        'save to ta_log
                        str = "insert into ta_log (fid, Tanggal_Log, jam_Log, Datetime) values ('" & rsAdms(0) & "','" & Format(logDate.Date, "dd/MM/yyyy") & "', '" & logDate.ToString("hh:mm:ss") & "', '" & logDate & "')"
                        executeSQL(str, oConn.ConnectionString, False)
                        rsAdms.Read()
                    End While

                    'del record on admsdb
                    str = "truncate table checkinout"
                    executeSQL(str, admsDB.ConnectionString, False)
                End Using

私はvbnetを初めて使用し、それについて少し知識があります。助けてください..よろしくお願いします..

4

1 に答える 1