我有一个在本地主机上运行的 mysql 数据库,其中包含一个表“详细信息”,我想在其中搜索“代码”并将“位置”的值返回到文本框。我在 visual studio vb.net 中编写了以下代码,
Private Sub BTN_SEARCH_Click(sender As Object, e As EventArgs) Handles BTN_SEARCH.Click
Dim connection As New MySqlConnection("server=localhost;database=test;user=root;password=12345")
Dim command As New MySqlCommand("select location from detail where code = @code", connection)
command.Parameters.Add("@code", SqlDbType.Int).Value = tb_CODE.Text
Dim adapter As New MySqlDataAdapter(command)
Dim table As New DataTable()
adapter.Fill(table)
tb_LOCATION.Text = ""
If table.Rows.Count() > 0 Then
tb_LOCATION.Text = table.Rows(0)(1).ToString()
Else
MessageBox.Show("NO Data Found")
End If
End Sub
我得到错误
adapter.Fill(table)
和
tb_LOCATION.Text = table.Rows(0)(1).ToString()
取决于我输入的字符串,这让我很困惑。 该表有 8 列,但我只想从第 3 列的位置列中检索数据。搜索代码在第 1 列中。 提前致谢。
最佳答案
您声明您的参数是 Int 类型,但您将其设置为字符串。我知道 VB 在涉及到这些时有点随意,但具体总是明智的
command.Parameters.Add("@code", SqlDbType.Int).Value = Convert.ToInt32(tb_CODE.Text);
我提倡设置 Option Strict On
并习惯于在没有隐式类型转换“帮助”的情况下进行编程(并不是说这在这里会有帮助,因为 parameter.Vakie 需要一个对象)
对于访问列,使用名称优于数字:
tb_LOCATION.Text = table.Rows(0)("location").ToString()
那么你的专栏放在哪里都没有关系
顺便说一句,因为你在这里只选择了一列,我想你是说“代码”是主键,你可以只使用
tb_LOCATION.Text = Convert.ToString(mysqlCommand.ExecuteScalar())
并省去适配器、DataTable 等 - 如果您要下载许多列/行,请使用它们,对返回单个值的查询(结果集为 1 行乘 1 列)使用 executescalar
关于mysql - 如何修复这可能是在 mysql 中搜索记录的最简单代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55931717/