ExecuteNonQuery出错

时间:2016-09-07 05:36:10

标签: mysql sql visual-studio-2015

我不是一个非常优秀的程序员,但我认为代码是正确的。任何人都可以检查它是否有错误,因为我总是在执行查询行时出错。

错误是:

  

{“'9'附近的语法不正确。” &安培; vbCrLf& “未公开的引号   在字符串',@ memberpic)'之后。“}

     

和/或

     

类型'System.Data.SqlClient.SqlException'的未处理异常   发生在System.Data.dll

中      

其他信息:'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

2 个答案:

答案 0 :(得分:0)

正如错误所示,您需要关闭字符串的单引号

& "',@memberpic)"

应该是

& "',@memberpic) '"
                ^^^^

答案 1 :(得分:0)

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

我的建议是,省去一些痛苦并参数化SQL语句中的所有值。这是一个很好的编程实践,出于各种各样的原因,但它也可以解决您从TextBox转义字符串的迫切需要。

首先,您要对您的SQL语句进行标记。

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

然后,您设置参数

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