Вы пытаетесь открыть 2 считывателя на одном соединении. См. Стрелки с двумя головками.
Reader = Command.ExecuteReader'<<----
While Reader.Read
primarykey1 = Reader.GetInt32("BorrowID")
Try
If Not Conn.State = ConnectionState.Open Then
Conn.Open()
End If
Dim query2 As String
query2 = "Update `tblborrow` Set `Remarks` = '" & "Due Date" & "' Where `BorrowID` = '" & primarykey1 & "'"
Command = New MySqlCommand(query2, Conn)
Reader = Command.ExecuteReader '<<----
Если вы разбиваете свой код на логические единицы, когда в каждом методе происходит только одна вещь, будет немного легче увидеть, где что-то не так go.
Хранение объектов вашей базы данных локально по отношению к методам, в которых они используются, позволяет вам быть уверенными, что они закрыты и удалены. Using...End Using
блоки обрабатывают это для вас, даже если есть ошибка.
Обратите внимание, что в 2 методах обновления параметры добавляются за пределы For
l oop и устанавливается только значение, которое изменяется внутри л oop.
Dim ConString As String = "serverxxxxxxxx.1;user=root;database=xxxxxxxxx"
Public Sub GetPKs()
Dim pkList As New List(Of Integer)
Dim DueDate As String = Date.Today.ToString("yyyy-MM-dd hh:mm:ss")
Using Conn As New MySqlConnection(ConString),
cmd As New MySqlCommand("Select BorrowID From tblborrow Where DueDate = @DueDate")
cmd.Parameters.Add("@DueDate", MySqlDbType.VarChar, 100).Value = DueDate
Conn.Open()
Using reader As MySqlDataReader = cmd.ExecuteReader
While reader.Read
pkList.Add(reader.GetInt32("BorrowID"))
End While
End Using
End Using
UpdateRemarks(pkList, DueDate)
End Sub
Private Sub UpdateRemarks(pks As List(Of Integer), DueDate As String)
Using con As New MySqlConnection(ConString),
cmd As New MySqlCommand("Update tblborrow Set Remarks = @DueDate Where BorrowID = @PK", con)
With cmd.Parameters
.Add("@DueDate", MySqlDbType.VarChar, 100).Value = DueDate
.Add("@PK", MySqlDbType.Int32)
End With
con.Open()
For Each i In pks
cmd.Parameters("@PK").Value = i
cmd.ExecuteNonQuery()
Next
End Using
End Sub
Private Sub GetOverduePKs()
Dim pkList As New List(Of Integer)
Using cn As New MySqlConnection(ConString),
cmd As New MySqlCommand("Select BorrowID From tblborrow Where DueDate < @DueDate")
cmd.Parameters.Add("@DueDate", MySqlDbType.VarChar, 100).Value = Date.Today.ToString("yyyy-MM-dd hh:mm:ss")
cn.Open()
Using reader = cmd.ExecuteReader
While reader.Read
pkList.Add(reader.GetInt32("BorrowID"))
End While
End Using
End Using
UpdateOverdueRemarks(pkList)
End Sub
Private Sub UpdateOverdueRemarks(pks As List(Of Integer))
Using cn As New MySqlConnection(ConString),
cmd As New MySqlCommand("Update tblborrow Set Remarks = 'Over Due' Where BorrowID = @PK")
cmd.Parameters.Add("@PK", MySqlDbType.Int32)
cn.Open()
For Each i In pks
cmd.Parameters("@PK").Value = i
cmd.ExecuteNonQuery()
Next
End Using
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
GetPKs()
GetOverduePKs()
End Sub