使用mysql更新vb.net中的查询语法错误

使用mysql更新vb.net中的查询语法错误,mysql,vb.net,Mysql,Vb.net,这里是我的问题,如果有人能发现错误 str = "update student set course='" & ComboBox1.Text & "',name='" & TextBox2.Text & "',f_name='" & TextBox3.Text & "',address='" & TextBox4.Text & "' ,tel_no='" & TextBox5.Text & "',qual

这里是我的问题,如果有人能发现错误

    str = "update student set course='" & ComboBox1.Text & "',name='" & 
TextBox2.Text & "',f_name='" & TextBox3.Text & "',address='" & TextBox4.Text 
& "' ,tel_no='" & TextBox5.Text & "',qualification='" & TextBox6.Text & 
"',remarks='" & TextBox7.Text & "',school/college='" & TextBox8.Text & 
"',fee='" & TextBox10.Text & "' where reg_no=" & TextBox9.Text & " "

以下是构建此查询的更好方法:

str=“更新学生”&
“设置课程=@course,name=@name,f_name=@fname,address=@address,”
“电话号码=@tel,资格=@qualification,备注=@comments,”
“`school/college`=@school,fee=@fee”&
“其中reg_no=@regno”
将cn用作新的MySqlConnection(“此处为连接字符串”)_
cmd作为新的MySqlCommand(str,cn)
'在此处使用数据库中的实际列类型/长度
cmd.Parameters.Add(“@course”,MySqlDbType.VarChar,15).Value=ComboBox1.Text
cmd.Parameters.Add(“@name”,MySqlDbType.VarChar,25).Value=TextBox2.Text
cmd.Parameters.Add(“@fname”,MySqlDbtype.VarChar,25).Value=TextBox3.Text
cmd.Parameters.Add(“@address”,MySqlDbType.VarChar,120)。Value=TextBox4.Text
cmd.Parameters.Add(“@tel”,MySqlDbType.VarChar,25).Value=TextBox5.Text
cmd.Parameters.Add(“@qualification”,MySqlDbType.VarChar,40).Value=TextBox6.Text
cmd.Parameters.Add(“@comments”,MySqlDbType.VarString).Value=TextBox7.Text
cmd.Parameters.Add(“@school”,MySqlDbType.VarChar,40).Value=TextBox8.Text
cmd.Parameters.Add(“@fee”,MySqlDbType.Decimal,6,2).Value=Convert.ToDecimal(TextBox10.Text)
cmd.Parameters.Add(“@regno”,MySqlDbType.Int32).Value=Integer.Parse(TextBox9.Text)
cn.Open()
cmd.ExecuteNonQuery()
终端使用
这对您有很多好处:

  • 它可以防止sql注入攻击
  • 它允许您接受包含单引号(
    )之类的数据。如果有人输入一个报价,您的代码将失败
  • 它会自动处理sql的日期格式设置之类的事情
  • 它更快,因为数据库服务器可以在编译查询后缓存执行计划,并随时间使用统计信息以获得更好的执行计划
  • 它可以更可靠地关闭数据库连接。如果引发异常,当前代码会使数据库连接挂起打开

  • 我应该在哪里添加from子句?我从未在update中使用过from子句,其中是错误消息,这是列的名称吗?学校/学院此代码非常容易受到sql注入攻击。这简直是乞求被黑客攻击。您应该查看如何使用参数化查询。SQL参数,SQL参数,SQL参数。我重复了一遍,因为经常会忽略一条说明SQL参数的注释。乔尔提到过,我也提到过,这很重要。