在尝试将数据插入MySQL表时,我收到两条错误消息



我收到这两条错误消息,

"ExecuteReader"不是"WindowsApplication1.MySqlCommand"的成员

"Public Sub New(("的参数太多{此错误发生在(query,conn(字段}

关于我尝试做什么的小解释

在这里,我试图制作一个应用程序,该应用程序将使用If pub="(另一篇文章中提到了pub(然后根据ComboBox1,表格可能会有所不同。根据表格,需要插入值。

这是我正在使用的代码

Dim T As String
T = ComboBox1.Text
If pub = "Women" Then
conn = New MySqlConnection
conn.ConnectionString = "server=localhost;user=root;password=1234;database=women_clothing"
Dim reader As MySqlDataReader
Try
conn.Open()
Dim query As String
query = "INSERT INTO [" + T + "] VALUES ('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "'," & Val(TextBox5.Text) & "," & Val(TextBox6.Text) & ");"
command = New MySqlCommand(query, conn)
reader = Command.ExecuteReader
MessageBox.Show("Data Saved")
conn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
conn.Dispose()
End Try
loadtable()
ElseIf pub = "Men" Then

Else
End If
loadtable()

谢谢

您不应该使用ExecuteReader来执行插入数据的语句。ExecuteReader用于SELECT查询。ExecuteNonQuery用于INSERTs

你的代码应该看起来像:

Using conn = New MySqlConnection("server=localhost;user=root;password=1234;database=women_clothing")
Using cmd = New MySqlCommand("INSERT INTO tableName VALUES (@p1,@p2,@p3,@p4,@p5,@p6)", conn)
conn.Open()
cmd.Parameters.AddWithValue("@p1", TextBox1.Text)
cmd.Parameters.AddWithValue("@p2", TextBox2.Text)
cmd.Parameters.AddWithValue("@p3", TextBox3.Text)
cmd.Parameters.AddWithValue("@p4", TextBox4.Text)
cmd.Parameters.AddWithValue("@p5", TextBox5.Text)
cmd.Parameters.AddWithValue("@p6", TextBox6.Text)
cmd.ExecuteNonQuery()
End Using
End Using

我还演示了如何使用参数始终使用参数。您的代码目前面临着SQL注入攻击黑客攻击的巨大风险,如果这还不能阻止您不要以这种方式编写代码,请记住,如果有人在你的一个文本框中输入撇号,你的应用程序就会崩溃(这会让使用它的更精明的技术天才认为它容易被注入黑客攻击,然后他们会闯入它(,这对最终用户来说很糟糕(并让他们向你的服务台/你投诉(。

";对我奶奶来说,这只是一个简单的应用程序,可以为她的黑胶收藏编制索引"-这是关于如果你想把你的编码技能带到软件开发世界中,不要学习一种明显有风险的行为模式,这种行为模式几乎会限制你的职业生涯。正如上面链接的VTech黑客攻击所显示的那样,现在有500万张儿童的照片漂浮在那里,他们的父母从未授权释放他们,这一切都是因为一些人在工作中没有采取适当的预防措施。考虑到我所在行业的性质,如果我的任何开发人员编写了一个易于注入的SQL,他们就会被解雇。

此外,请养成在将文本框添加到表单后重命名文本框的习惯。对于任何人(包括你自己,6个月后(来说,都很难不断地查找";嗯,名字文本框是什么?是文本框2还是文本框3"将文本框添加到表单后,在属性网格的(Name(行中键入新内容大约需要2秒钟;firstNameTextBox远优于textBox2

感谢@Caius,这是一个使用ConnectionStringBuilderWith块、复合Using块和字符串插值的变体,仅供说明。

注意在声明连接和命令时使用As代替=;这是为了正式设置类型,而不是依靠CCD_ 8来确定它们。

Dim connStr As New MySqlConnectionStringBuilder() With {
.Server = "localhost",
.Database = "women_clothing",
.UserID = "root",
.Password = "1234"
}
' -> "server=localhost;database=women_clothing;user id=root;password=1234"
Using conn As New MySqlConnection(connStr.ConnectionString),
cmd As New MySqlCommand($"INSERT INTO [{T}] VALUES (@p1, @p2, @p3, @p4, @p5, @p6)", conn)
conn.Open()
With cmd
.Parameters.AddWithValue("@p1", TextBox1.Text)
.Parameters.AddWithValue("@p2", TextBox2.Text)
.Parameters.AddWithValue("@p3", TextBox3.Text)
.Parameters.AddWithValue("@p4", TextBox4.Text)
.Parameters.AddWithValue("@p5", TextBox5.Text)
.Parameters.AddWithValue("@p6", TextBox6.Text)
.ExecuteNonQuery()
End With
conn.Close()
End Using

最新更新