我有一个在localhost上运行的mysql数据库,其中包含一个表“ detail”,我想在其中搜索“ code”并将“ location”的值返回到文本框。我已经在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(表格)
和
tb_LOCATION.Text = table.Rows(0)(1).ToString()
取决于我的输入字符串,我对此感到困惑。 该表有8列,但我只想从位置列(即列3)中检索数据。搜索代码在列1中。 预先感谢。
答案 0 :(得分:2)
您声明参数的类型为Int,但是将其设置为字符串。我知道,VB在涉及这些方面时会比较随意,但始终明智的做法是
command.Parameters.Add("@code", SqlDbType.Int).Value = Convert.ToInt32(tb_CODE.Text);
我主张设置Option Strict On
并习惯于在没有隐式类型转换“帮助”的情况下进行编程(但这在这里不会有所帮助,因为parameter.Vakie采用了Object)
对于访问列,使用名称胜于使用数字:
tb_LOCATION.Text = table.Rows(0)("location").ToString()
那您的列在哪里都没关系
顺便说一句,由于您仅在此处选择一列,而且我认为您是在说“代码”是主键,因此您可能只使用了
tb_LOCATION.Text = Convert.ToString(mysqlCommand.ExecuteScalar())
并省去适配器,DataTable等-如果要下载许多列/行,请使用它们,对返回单个值(结果集为1乘1列)的查询使用executescalar
答案 1 :(得分:1)
tb_LOCATION.Text = table.Rows(0)(1).ToString()
因为您只有一个字段,所以您需要更改为table.Rows(0)(0).ToString()
答案 2 :(得分:0)
您的主要问题是此行...
command.Parameters.Add("@code", SqlDbType.Int).Value = tb_CODE.Text
您正在使用MySQL,但已引用了Sql服务器类型。
我添加了Using块,以确保在发生错误时关闭和处置数据库对象。我还在用户输入上添加了一个try解析。永远不要信任用户:-)。
由于只查找单个值,因此可以使用.ExecuteScalar,它返回结果集第一行的第一列。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim code As Integer
If Not Int32.TryParse(tb_CODE.Text, code) Then
MessageBox.Show("Please enter a number in the Code box")
Return
End If
Dim location As Object = Nothing
Using connection As New MySqlConnection("server=localhost;database=test;user=root;password=12345")
Using command As New MySqlCommand("select location from detail where code = @code", connection)
command.Parameters.Add("@code", MySqlDbType.Int32).Value = code
location = command.ExecuteScalar()
End Using
End Using
If location Is Nothing Then
MessageBox.Show("NO Data Found")
Return
End If
tb_LOCATION.Text = location.ToString
End Sub