Helpex - Trao đổi & giúp đỡ Đăng nhập
1

Tôi nhập Quyền dataSourcenhưng tôi không thể khắc phục sự cố cmd.ExecuteNonQuery() nói rằng:

Lỗi cú pháp trong câu lệnh INSERT INTO.

Mã số:

Private Sub btnadd1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnadd1.Click
    Dim cmd As New OleDb.OleDbCommand
    Dim Printlist1 As New DataTable
    If Not con.State = ConnectionState.Open Then
        con.ConnectionString = "Provider=Microsoft.Ace.OLEDB.12.0; Data Source=c:Database11.accdb"
        con.Open()
        cmd.Connection = con
    End If
    If Me.text1.Tag & "" = "" Then
        cmd.CommandText = "INSERT INTO Printlist1(StickerCode, Description, Company, Department, Location, User, SerialNumber, DatePurchased, Tagable, Quantity, Brand, Model)" & _
                            " VALUES(" & Me.text1.Text & ",'" & Me.text2.Text & "','" & _
                                Me.text3.Text & "','" & Me.text4.Text & "','" & Me.text5.Text & "','" & _
                                Me.text6.Text & "','" & Me.text7.Text & "','" & Me.text8.Text & "','" & _
                                Me.text9.Text & "','" & Me.text10.Text & "','" & Me.text11.Text & "','" & _
                                Me.text12.Text & "')"
        cmd = New OleDbCommand(cmd.CommandText, con)
        cmd.ExecuteNonQuery()
    Else
        cmd.CommandText = "UPDATE Printlist1 " & _
                        " SET StickerCode='" & Me.text1.Text & _
                        ", Description='" & Me.text2.Text & "'" & _
                        ", Company='" & Me.text3.Text & "'" & _
                        ", Department='" & Me.text4.Text & "'" & _
                        ", Location='" & Me.text5.Text & "'" & _
                        ", User='" & Me.text6.Text & "'" & _
                        ", SerialNumber='" & Me.text7.Text & "'" & _
                        ", DatePurchased='" & Me.text8.Text & "'" & _
                        ", Tagable='" & Me.text9.Text & "'" & _
                        ", Quantity='" & Me.text10.Text & "'" & _
                        ", Brand='" & Me.text11.Text & "'" & _
                        ", Model='" & Me.text12.Text & "'" & _
                        " WHERE text1=" & Me.text1.Tag
        cmd.ExecuteNonQuery()
    End If
    RefreshData()
    Me.btnclear1.PerformClick()
    con.Close()
End Sub
1 hữu ích 4 bình luận 752 xem chia sẻ
6

Sử dụng một truy vấn được tham số hóa, như sau:

cmd.CommandText = "INSERT INTO Printlist1(StickerCode, Description, Company, Department, Location, User, SerialNumber, DatePurchased, Tagable, Quantity, Brand, Model)" & _
                        " VALUES(@StickerCode, @Description, @Company, @Department, @Location, @User, @SerialNumber, @DatePurchased, @Tagable, @Quantity, @Brand, @Model)"

cmd.Parameters.AddWithValue("@StickerCode", Me.Text1.Text)
cmd.Parameters.AddWithValue("@Description", Me.Text2.Text)
cmd.Parameters.AddWithValue("@Company", Me.Text3.Text)
cmd.Parameters.AddWithValue("@Department", Me.Text4.Text)
cmd.Parameters.AddWithValue("@Location", Me.Text5.Text)
cmd.Parameters.AddWithValue("@User", Me.Text6.Text)
cmd.Parameters.AddWithValue("@SerialNumber", Me.Text7.Text)
cmd.Parameters.AddWithValue("@DatePurchased", Me.Text8.Text)
cmd.Parameters.AddWithValue("@Tagable", Me.Text9.Text)
cmd.Parameters.AddWithValue("@Quantity", Me.Text10.Text)
cmd.Parameters.AddWithValue("@Brand", Me.Text11.Text)
cmd.Parameters.AddWithValue("@Model", Me.Text12.Text)

Lưu ý: Tốt nhất là giữ thứ tự của các tham số phù hợp với truy vấn, vì cơ sở dữ liệu như Microsoft Access sẽ không thực thi truy vấn một cách chính xác nếu thứ tự bị thay đổi.

6 hữu ích 1 bình luận chia sẻ
3

Có khả năng một trong các Me.textN.Textgiá trị của bạn có dấu nháy đơn trong đó hoặc một số ký tự không mong muốn khác đang phá vỡ dấu ngoặc kép SQL của bạn. Giải pháp cho điều này là sử dụng các truy vấn được tham số hóa và / hoặc thủ tục được lưu trữ thay thế.

Điều này ngẫu nhiên cũng sẽ bảo vệ bạn hình thành các cuộc tấn công SQL Injection lợi dụng cùng một khuyết điểm trong việc soạn các lệnh SQL dưới dạng chuỗi trong ứng dụng khách.

(LƯU Ý: Tôi đang giả định giá Me.text1.Texttrị StickerCodelà một số. Nếu không thì đó là vấn đề vì bạn không trích dẫn nó theo cách bạn làm với các cột khác.)

3 hữu ích 0 bình luận chia sẻ
1

Dòng đầu tiên bị thiếu là '

...
"SET StickerCode='" & Me.text1.Text & "'" & _ 
...
1 hữu ích 2 bình luận chia sẻ
0

Bạn đang thiếu các dấu ngoặc kép xung quanh giá trị đầu tiên của bạn. Cố gắng

" VALUES('" & Me.text1.Text & "','" & Me.text2.Text & "','" & _
    Me.text3.Text & "','" & Me.text4.Text & "','" & Me.text5.Text & "','" & _
    Me.text6.Text & "','" & Me.text7.Text & "','" & Me.text8.Text & "','" & _
    Me.text9.Text & "','" & Me.text10.Text & "','" & Me.text11.Text & "','" & _
    Me.text12.Text & "')"
0 hữu ích 2 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ sql vb.net , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading