2010-02-09 36 views
6

Tôi đang sử dụng cơ sở dữ liệu MS Access làm phần phụ trợ của ứng dụng VB.NET của mình. Tôi đang nhập chi tiết người dùng vào cơ sở dữ liệu bằng cách sử dụng câu lệnh INSERT INTO:Kiểm tra nếu câu lệnh INSERT INTO thành công

cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & config("DatabasePath") & ";") 
cn.Open() 
cmd = New OleDbCommand("INSERT INTO blah blah blah...", cn) 
dr = cmd.ExecuteReader 

Mọi thứ đều hoạt động, nhưng tôi muốn kiểm tra xem dữ liệu có thực sự được nhập vào cơ sở dữ liệu hay không. Tôi đã thử sử dụng:

cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & config("DatabasePath") & ";") 
cn.Open() 
cmd = New OleDbCommand("INSERT INTO blah blah blah...", cn) 
dr = cmd.ExecuteReader 
If dr.Read() Then 
    ' Blah 
End If 

nhưng rõ ràng câu lệnh chèn không trả về bất cứ điều gì để nó không hoạt động. Bất kỳ đề xuất?

Trả lời

8

Nếu tất cả những gì bạn có là câu lệnh INSERT, bạn có thể sử dụng phương thức ExecuteNonQuery() trả về số lượng hàng bị ảnh hưởng.

Như thế này:

cmd = New OleDbCommand("INSERT INTO blah blah...", cn) 
rowCount = cmd.ExecuteNonQuery() 
If rowCount < 1 Then 
    ' Blah 

Bạn cần phải xin lỗi nếu VB là không đúng, tôi không kiểm tra nó, nhưng tôi hy vọng bạn sẽ có được ý tưởng.

+0

Chỉ là những gì tôi đang tìm kiếm, cảm ơn! :) – Dox

0

Bạn có thể chạy nhanh SELECT COUNT(*) FROM blah blah blah sử dụng cùng tiêu chí quan trọng như bạn đã sử dụng để chèn không?

+0

Đây là những gì tôi nghĩ lần đầu tiên. Vấn đề là sẽ có nhiều hơn một trong các hàng tương tự, do đó, trừ khi tôi giữ một số lượng các hàng song công, điều này không phải là rất khả thi. Plus tôi muốn giảm thiểu các truy vấn cơ sở dữ liệu của tôi càng nhiều càng tốt :) – Dox

0

Sử dụng phương thức ExecuteNonQuery vì truy vấn không trả về bất kỳ kết quả nào. Phương thức trả về một số nguyên là số hàng bị ảnh hưởng.

Dim count As Integer = cmd.ExecuteNonQuery() 
Các vấn đề liên quan