gpt4 book ai didi

mysql - Mysql 中索引超出数组异常

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

我有一个用于存储用户详细信息的 MySQL 表,其中包含 3 列,即“用户名”、“密码”、“访问级别”。当我尝试将详细信息加载到 VB.net 变量中时,它显示“索引超出数组范围”异常(exception)我是 mysql 新手,请帮忙

我尝试更改mysqldatareader()的索引值

DBConnectionMySql()
myCommandMySql.Connection = myConnectionMySql
myConnectionMySql.Open()
'-----
myCommandMySql.CommandText = "select * from tbl_userregistration where UserName = '" & Trim(Username_TextBox.Text) & "'"
myDataReaderMySql = myCommandMySql.ExecuteReader
If myDataReaderMySql.Read() = Nothing Then
MessageBox.Show("Invalide User Name you Enter!", "Username/Password checker", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Username_TextBox.Focus()
Else
If Username_TextBox.Text = myDataReaderMySql(1) And Password_TextBox.Text = myDataReaderMySql(2) Then
user = Username_TextBox.Text
username = Username_TextBox.Text
Weighing_frm.Show()
Me.Visible = False
Me.Refresh()
Else
MessageBox.Show("Invalide Username Or Password please check and Re-Login!", "Username/Password checker", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Username_TextBox.Focus()

当我尝试从加载的数据以 vb.net 表单登录时,显示“索引超出数组范围”错误消​​息

最佳答案

将数据对象保留在本地,这样您就可以确保它们已关闭并被处置。即使出现错误,Using...End using block 也能确保这一点。您可以将连接字符串设置为表单级别变量,以便可以在任何地方使用它,但这是您需要的唯一表单级别变量。

您可以将连接字符串直接传递给连接的构造函数。

您可以将 sql 命令文本和连接直接传递给命令的构造函数。

请始终使用参数。它不仅可以避免引号放错,而且有助于确保将正确的数据类型发送到数据库。最重要的是它有助于保护您的数据库免受 SQL 注入(inject)的侵害,这可能会破坏您的数据库。我必须猜测您数据库中的数据类型。检查数据库并相应调整代码。

DataReader.Read 方法返回一个 Boolean,因此检查它是否返回 Nothing 不是有效的测试。 Boolean 是一种值类型,因此它始终返回 TrueFalse,从不返回 Nothing

用户名始终匹配,因为这是您在 where 子句中发送到数据库的用户名。正如@Jimi 的评论中所指出的,数据读取器返回的字段的索引从 0 开始,因此用户名将为 0,密码为 1,访问级别为 2。.net 中的几乎所有集合都从索引 0 开始。

为什么使用两个具有相同值的不同变量?

user = Username_TextBox.Text
username = Username_TextBox.Text

这是做什么的?

Me.Refresh()

在真实的应用程序中,您永远不会将密码存储为纯文本。它们将被加盐和散列。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Using cn As New MySqlConnection("Your connection string")
Using cmd As New MySqlCommand("select * from tbl_userregistration where UserName = @UserName;", cn)
cmd.Parameters.Add("@UserName", MySqlDbType.Text).Value = Trim(Username_TextBox.Text)
cn.Open()
Using dr = cmd.ExecuteReader
If dr.HasRows Then
dr.Read()
If Password_TextBox.Text = myDataReaderMySql(1) Then
user = Username_TextBox.Text
Weighing_frm.Show()
Me.Visible = False
Else
MessageBox.Show("Invalide Username Or Password please check and Re-Login!", "Username/Password checker", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Username_TextBox.Focus()
End If
Else
MessageBox.Show("Invalid User Name you Enter!", "Username/Password checker", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Username_TextBox.Focus()
End If
End Using
End Using
End Using
End Sub

关于mysql - Mysql 中索引超出数组异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56197226/

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