首页 > 解决方案 > 如何解决这个可能是在 mysql 中搜索记录的最简单代码

问题描述

我有一个在 localhost 上运行的 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

我收到错误

适配器.填充(表)

tb_LOCATION.Text = table.Rows(0)(1).ToString()

取决于我的输入字符串,我对此感到困惑。该表有 8 列,但我只想从第 3 列的位置列中检索数据。搜索代码在第 1 列中。提前致谢。

标签: mysqlvb.net

解决方案


您声明您的参数是 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 等 - 如果您要下载许多列/行,请使用它们,对返回单个值的查询使用 executescalar(1 行 x 1 列的结果集)


推荐阅读