" />
  • Thứ Năm, 13/04/2006 09:02 (GMT+7)

    Lỗi "Syntax error in Update statement" trong VB.NET

    Câu hỏi :
    Lập trình VB .Net với CSDL Access bị báo lỗi "Syntax error in UPDATE statement", nhưng khi chuyển qua SQL Server thì không bị. Dưới đây là hàm cập nhật CSDL:


    Trả lời :
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim con As String = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' & Application.StartupPath & '\db1.mdb;Persist Security Info=False;'
    Dim oledbcon As New OleDbConnection(con)
    Dim myOleDbCommand As New OleDbCommand('Update Pass Set User_id = '' & TextBox3.Text & '',' & 'Password ='' & TextBox4.Text & '' where User_id = '' & TextBox1.Text & '' And ' & 'Password = '' & TextBox2.Text & ''', oledbcon)
    Try
       oledbcon.Open()
       myOleDbCommand.ExecuteNonQuery() 'Câu này báo lỗi là : Run-time exception thrown :System.Data.OleDb. OleDbException –Syntax error in UPDATE statement.
       MsgBox('Password Saved Successfully !', MsgBoxStyle.Information, 'System')
    Catch myException As Exception
       MessageBox.Show(myException.ToString()) Finally
       If (oledbcon.State = ConnectionState.Open) Then
          oledbcon.Close()
       End If
    End Try
    End Sub

    Khi lập trình bằng VB .Net, người ta thường dùng ADO .Net để truy xuất database. ADO .Net cung cấp 4 loại đối tượng Connection sau để quản lý việc truy xuất database:
    1. Đối tượng SqlConnection quản lý việc truy xuất database của SQL Server.
    2. Đối tượng OracleConnection quản lý việc truy xuất database của Oracle Server.
    3. Đối tượng OleDbConnection quản lý việc truy xuất database thông qua driver OLE DB.
    4. Đối tượng OdbcConnection quản lý việc truy xuất database thông qua tên gợi nhớ DSN (Data Source Name).

    Thí dụ đoạn code VB .Net của bạn dùng đối tượng OleDbConnection. Chuỗi ConnectionString cho đối tượng này phải chứa thông tin về Provider (tên driver thích hợp để truy xuất database) và vị trí file database (đường dẫn file database). Như vậy đoạn lệnh thiết lập đối tượng OleDbConnection của bạn sẽ vừa phức tạp, dễ gây lỗi, vừa phụ thuộc vào công nghệ quản lý database và vị trí vật lý của file database. Do đó tốt hơn là nên dùng đối tượng
    OdbcConnection để truy xuất database, vì với đối tượng này, bạn chỉ cần cung cấp tên DSN nhận dạng database cần truy xuất, tên DSN chỉ là tên luận lý, nó không hề chứa thông tin về công nghệ quản lý database và vị trí vật lý của database nên đoạn code ứng dụng của bạn sẽ rất tổng quát, dễ đọc.

    Thí dụ nếu bạn đã định nghĩa DSN tên là 'Password' nhận dạng file database Access db1.mdb của bạn thì hàm hiệu chỉnh thông tin password của bạn sẽ được viết lại như sau:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       'tạo 1 connection đến database cần truy xuất
       Dim conn As New System.Data.Odbc.OdbcConnection
       'khai báo connectionstring miêu tả database
       conn.ConnectionString = 'DSN=Password'
       'tạo lệnh sql cần thực hiện
       Dim sqlcmd = 'Update Pass Set User_id = '' & TextBox3.Text & '',' & 'Password ='' & TextBox4.Text & '' where User_id like '' & TextBox1.Text & '' And ' & 'Password like '' & TextBox2.Text & '''
       'tạo đối tượng command
       Dim myOleDbCommand As New OdbcCommand(sqlcmd)
       Try
         conn.Open()
         myOleDbCommand.Connection = conn
         myOleDbCommand.ExecuteNonQuery()
         MsgBox('Password Saved Successfully !', MsgBoxStyle.Information, 'System')
       Catch myException As Exception
         MessageBox.Show(myException.ToString())
       Finally
         If (oledbcon.State = ConnectionState.Open) Then
           oledbcon.Close()
         End If
       End Try
    End Sub
    Lưu ý rằng để định nghĩa DSN kết hợp với database cần truy xuất, bạn hãy vào Control Panel, Administrative Tools, chạy icon 'Data Source (ODBC)' rồi thực hiện button 'Add'.
    Chuyên mục: Cơ sở dữ liệu