gpt4 book ai didi

mysql - DataReader 已打开,必须先将其关闭

转载 作者:行者123 更新时间:2023-11-29 19:16:11 25 4
gpt4 key购买 nike

我正在尝试替换数据库上的“上次登录日期”。至于数据库没有显示一个字符串,表示“第一次 session ”。

我对此应用程序做了很多工作。创建一个帐户,验证该帐户尚不存在等。

这是我的连接函数,我创建它可以从程序的任何位置调用:

Function ServerConnection()
Try
MyConnection.ConnectionString = "server=127.0.0.1;user=root;password=password;database=titulo"
MyConnection.Open()
Return True
Catch ex As Exception
Return False
End Try
End Function

这就是当您使用用户名和密码“登录”时发生的情况(不用担心 SQL 注入(inject)问题):

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
ServerConnection()
Try
Dim MyCommand As New MySqlCommand("select * from titulo.accounts where accountName='" & txtUsername.Text & "' and accountPassword='" & Hash512(txtPassword.Text, txtUsername.Text) & "'", MyConnection)
Dim MyReader As MySqlDataReader
MyReader = MyCommand.ExecuteReader
If Not MyReader.HasRows Then
MsgBox("No se ha encontrado ninguna cuenta con estas credenciales.")
Else
MyReader.Read()
connectedAccount.Accounts(MyReader.GetInt32("id"), MyReader.GetString("accountName"), MyReader.GetString("accountMail"), MyReader.GetString("accountLogon"))
CharacterManager.Show()
End If
MyReader.Dispose()
MyReader.Close()
MyConnection.Close()
Catch ex As Exception
MsgBox(ex.Message)
Finally
MyConnection.Dispose()
End Try
End Sub

到目前为止,它有效,我可以登录,并且在下一个表单上我可以看到存储在“connectedAccount”对象上的数据。

这是一切都停止工作的地方:

Private Sub CharacterManager_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
ServerConnection()
Dim MyCommand As New MySqlCommand("update titulo.accounts set accountLogon='" & lastLogon & "' where id= '" & connectedAccount.GetAccountId & "'", MyConnection)
MyCommand.ExecuteNonQuery()
lblAccountName.Text = connectedAccount.GetAccountName
lblAccountLogon.Text = connectedAccount.GetAccountLogon
MyConnection.Close()
Catch ex As MySqlException
MsgBox(ex.Message)
Finally
MyConnection.Dispose()
End Try
End Sub

每当我运行这个时,我都会得到一个

已经有一个与此连接关联的打开的 DataReader,必须先将其关闭。

我应该如何进行?

最佳答案

在第二个代码片段中,您调用 ExecuteReader,然后调用 CharacterManager.Show(),然后关闭该数据读取器。显示表单将引发其 Load 事件,并在该表单的 Load 事件处理程序中调用 ExecuteNonQuery...,而数据读取器处于还开着。看到问题了吗?

也许您应该做的是使用数据适配器填充 DataTable,编辑其中的数据,然后通过一次调用 Update 保存所有更改该数据适配器的方法。

关于mysql - DataReader 已打开,必须先将其关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42688978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com