所以我有 2 个 mysql 表,一个名为“Service_Details”,一个名为“Payment_details”
我的表单中有一个组合框,它显示服务表中的“service_id”字段。 我正在尝试编写一个文本框,因此当我从组合框中选择服务 ID 时,它会写入“服务”,这是我的服务详细信息表中的另一个字段。服务 ID 链接到服务。
我在 [0] 处收到错误“需要标识符”,并且“类型‘system.data.datatablecollection’的值无法在 dss.tables 转换为‘字符串’”
浏览互联网一个小时后我似乎无法让它工作
这是我的代码:
Private Sub cbxserviceid_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbxserviceid.SelectedIndexChanged
Dim dss As New DataSet
Dim daa As New MySqlDataAdapter("SELECT * from service_details WHERE ServiceID='" + cbxserviceid.Text + "'", objconnection)
Dim cmddd = New MySqlCommandBuilder(daa)
daa.Fill(dss)
txtService1.Text = dss.Tables[0].Rows[0]["Service"].ToString();
End Sub
最佳答案
VB.NET中索引使用圆括号表示,C#中使用方括号
txtService1.Text = dss.Tables(0).Rows(0)("Service").ToString()
同时避免对 sql 命令文本使用字符串连接,始终使用参数化查询
Private Sub cbxserviceid_SelectedIndexChanged(......)
Dim dss As New DataSet
if cbxserviceid.SelectedIndex <> -1 Then
Dim daa As New MySqlDataAdapter("SELECT * from service_details WHERE ServiceID=@id", _
objconnection)
daa.SelectCommand.Parameters.AddWithValue("@id", Convert.ToInt32(cbxserviceid.Text))
daa.Fill(dss)
txtService1.Text = dss.Tables(0).Rows(0)("Service").ToString()
End If
End Sub
我还删除了 MySqlCommandBuilder 的创建,因为适配器是一个局部变量,它没有任何意义或效果(当然,如果这是您在此事件中的所有代码)。
查看下面的评论以及与发布者的聊天,还有另一个错误需要修复。 当分配组合框的 DataSource、DisplayMember 和 ValueMember 属性时,必须遵循精确的顺序以避免不必要的副作用
cbxserviceid.DisplayMember = "ServiceID"
cbxserviceid.ValueMember = "ServiceID"
cbxserviceid.DataSource = datatable
关于mysql - 选择组合框后用 mysql 数据填充文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21809460/