我正在做我的系统的一部分,即更新和/或将数据插入数据库。我有一个带有组合框和10个文本框的表单。在这里,组合框中充满了我数据库中诊断表中的疾病。
诊断表的结构是:f_id,疾病,症状,所以疾病可以有很多症状。
如果从组合框中选择了某个项目,症状将显示在文本框中。我已经有了这个工作。我的问题是我应该能够插入或更新表中的行。我真的不知道该怎么做。到目前为止,这是我的代码:
Call Connect()
If Duplicate() = False Then
STRSQL = "insert into diagnose values ('', @ill, @sym0), ('', @ill, @sym1), ('', @ill, @sym2), ('', @ill, @sym3), ('', @ill, @sym4), ('', @ill, @sym5), ('', @ill, @sym6), ('', @ill, @sym7), ('', @ill, @sym8), ('', @ill, @sym9)"
Using myCmd = New MySqlCommand(STRSQL, myConn)
myConn.Open()
myCmd.Parameters.AddWithValue("ill", cmbRecord.Text)
myCmd.Parameters.AddWithValue("sym0", symp0.Text)
myCmd.Parameters.AddWithValue("sym1", symp1.Text)
myCmd.Parameters.AddWithValue("sym2", symp2.Text)
myCmd.Parameters.AddWithValue("sym3", symp3.Text)
myCmd.Parameters.AddWithValue("sym4", symp4.Text)
myCmd.Parameters.AddWithValue("sym5", symp5.Text)
myCmd.Parameters.AddWithValue("sym6", symp6.Text)
myCmd.Parameters.AddWithValue("sym7", symp7.Text)
myCmd.Parameters.AddWithValue("sym8", symp8.Text)
myCmd.Parameters.AddWithValue("sym9", symp9.Text)
myCmd.ExecuteNonQuery()
End Using
MsgBox("Record Added")
myConn.Close()
Else
STRSQL = "Update diagnose set first_aid = @ill, sname = @symp where first_aid = @ill"
Using myCmd = New MySqlCommand(STRSQL, myConn)
myConn.Open()
myCmd.Parameters.AddWithValue("ill", cmbRecord.Text)
myCmd.Parameters.AddWithValue("sym", symp0.Text)
myCmd.Parameters.AddWithValue("sym", symp1.Text)
myCmd.Parameters.AddWithValue("sym", symp2.Text)
myCmd.Parameters.AddWithValue("sym", symp3.Text)
myCmd.Parameters.AddWithValue("sym", symp4.Text)
myCmd.Parameters.AddWithValue("sym", symp5.Text)
myCmd.Parameters.AddWithValue("sym", symp6.Text)
myCmd.Parameters.AddWithValue("sym", symp7.Text)
myCmd.Parameters.AddWithValue("sym", symp8.Text)
myCmd.Parameters.AddWithValue("sym", symp9.Text)
myCmd.ExecuteNonQuery()
End Using
MsgBox("Record Updated")
myConn.Close()
End If
我已经有一个模块将我的项目连接到mysql db(myConn)。我不能做的是我无法更新诊断表中的任何行。我也无法添加行。诊断表看起来像这样(例子):
f_id | illness | symptom
1 | fever | fever
2 | fever | hot temperature
3 | fever | dizziness
4 | fever | headache
所以在这种情况下,假设我在组合框中选择了发烧,那么它将在4个文本框中显示症状。如果用户进行了更改,Duplicate()
函数将检查组合框值是否已有记录。如果为true则会更新。假设用户添加了另一个症状,因此如果单击“保存”按钮,发烧将添加另一行并添加症状。
如果为false,则会添加新记录,这意味着将根据文本框中输入的症状数量在表中添加新的行或行。所以,说“冷”是作为新记录添加的,我输入了2个症状,这意味着我在表格中使用了10个文本框中的2个,然后在表格上添加了2行。
答案 0 :(得分:0)
您正尝试在同一查询中插入多行,这是不可能的。您需要为插入的每一行分别进行查询。循环遍历文本框数组(从您之前的问题)到插入:
Dim arrayOfTextboxes() As TextBox = {symp0, ... put all textboxes here..., symp9}
myConn.Open()
If Duplicate() = False Then
STRSQL = "insert into diagnose values (@ill, @sym)"
For i = 0 To arrayOfTextboxes.Count - 1
If String.IsNullOrEmpty(arrayOfTextboxes(i).Text) Then Continue For
Using myCmd = New MySqlCommand(STRSQL, myConn)
myCmd.Parameters.AddWithValue("@ill", cmbRecord.Text)
myCmd.Parameters.AddWithValue("@sym", arrayOfTextboxes(i).Text)
myCmd.ExecuteNonQuery()
End Using
Next
MsgBox("Record Added")
Else
// I don't get what you want to do in the update part yet.
End If
myConn.Close()