mysql - ExecuteNonQuery 时出错

标签 mysql sql visual-studio-2015

我不是一个很好的程序员,但我认为代码是正确的。任何人都可以检查它是否有错误,因为我总是在 executenonquery 行出错。

错误是:

{"Incorrect syntax near '9'." & vbCrLf & "Unclosed quotation mark after the character string ',@memberpic)'."}

and/or

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll

Additional information: Incorrect syntax near '9'.

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
    cn.Open()
    Using cmd As New SqlClient.SqlCommand("INSERT INTO tblMembers(name, contactno, address, birthday, baptism, ministry, memberpic)VALUES('" & txtName.Text & "','" & txtContactNo.Text & "','" & txtAddress.Text & "',''" & dtpBirthday.Text & "','" & dtpBaptism.Text & "','" & txtMinistry.Text & "',@memberpic)", cn)
        cmd.Parameters.Add(New SqlClient.SqlParameter("@memberpic", SqlDbType.Image)).Value = IO.File.ReadAllBytes(a.FileName)
        i = cmd.ExecuteNonQuery
    End Using
    If (i > 0) Then
        MsgBox("Save " & i & " record successfully")
        Clear()
    End If
    cn.Close()
    ShowRecord()
End Sub

最佳答案

其中一个 TextBox 元素中的一个字符串可能包含单引号 '

我的建议是,为您自己省去一些痛苦并参数化 SQL 语句中的所有值。出于多种原因,这是一个很好的编程实践,但它也将解决您对转义可能来自 TextBox 的字符串的迫切需求。

首先,您将 SQL 语句标记化。

...
VALUES(@name,@contactno,@address,@birthday,@baptism,@ministry,@memberpic)

然后,你设置你的参数

... 
cmd.Parameters.Add(New SqlClient.SqlParameter("@name", SqlDbType.Varchar)).Value = txtName.Text

关于mysql - ExecuteNonQuery 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39361883/

相关文章:

mysql - 过滤组合多列的重复项

sql - mysql 根据标签选择相关对象

mysql - 按其他日期分割日期

MySQL 选择接下来大于时间的 2 行

c - 我想在不使用字符串函数的情况下反转 c 中的字符串并更正字符串?

c# - ReportViewer 控件在 Toolbox visual studio 2015 中不可见

mysql - 将文件内容插入 MySQL 表的列

javascript - 识别要删除的多边形

php - mysql单个查询对多个值进行计数

c++ - 为什么创建 std::runtime_error 会重置 WSAGetLastError?