'21'附近的语法不正确

时间:2012-11-30 20:39:43

标签: sql-server vb.net

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim cmd As New SqlCommand("insert into accountant(acc_id,acc_name,payment_type,bill_no) values ('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "'", cn)
    cn.Open()
    cmd.ExecuteNonQuery()
    cn.Close()

    MsgBox("Accountant data inserted SucsessFully")
    TextBox1.Clear()
    TextBox2.Clear()
    TextBox3.Clear()
    TextBox4.Clear()

    accouantant_Load(sender, e)
End Sub

1 个答案:

答案 0 :(得分:2)

您的文本框中可能只有一个引号 解决方案是使用参数来构建您的sql字符串 如果您使用参数,那么您就可以解析字符串,日期或其他字段的问题,但是,参数的最重要性是防止Sql Injection Attacks

    Dim cmd As New SqlCommand("insert into accountant(acc_id,acc_name,payment_type,bill_no)" + 
                              "values (@id, @name, @ptype, @bnum)", cn)
    cn.Open()
    cmd.Parameters.AddWithValue("@id",TextBox1.Text)
    cmd.Parameters.AddWithValue("@name", TextBox2.Text)
    cmd.Parameters.AddWithValue("@ptype" TextBox3.Text)
    cmd.Parameters.AddWithValue("@bnum", TextBox4.Text)
    cmd.ExecuteNonQuery()
    cn.Close()

请注意,首先,我不知道您的acc_id字段是否为Identity列。在这种情况下,请不要为其添加值。它将由数据库自动计算 其次,我假设所有字段都是varchar / nvarchar或类似的类型。如果不是这种情况,那么您应该使用参数值的转换,如

    cmd.Parameters.AddWithValue("@bnum", Convert.ToInt32(TextBox4.Text))