2010-02-09 28 views
6

Estoy usando una base de datos de MS Access como el back-end de mi aplicación VB.NET. Estoy entrando en detalles de los usuarios en la base de datos utilizando un INSERT INTO:Comprobando si la instrucción INSERT INTO fue exitosa

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 

Todo funciona, pero quería comprobar si los datos realmente se haya introducido en la base de datos. He intentado usar:

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 

pero, obviamente, la instrucción de inserción no devuelve nada, así que esto no funciona. ¿Alguna sugerencia?

Respuesta

8

Si todo lo que tiene es la instrucción INSERT, puede usar el método ExecuteNonQuery() que devuelve cuántas filas se vieron afectadas.

De esta manera:

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

Tienes que disculparme si el VB no es correcto, no he probado, pero espero que se entiende la idea.

+0

¡Justo lo que estaba buscando, gracias! :) – Dox

0

¿Se puede ejecutar un SELECT COUNT(*) FROM blah blah blah rápido utilizando los mismos criterios clave que utilizó para el inserto?

+0

Esto es lo que pensé la primera vez. El problema es que va a haber más de una de las mismas filas, así que a menos que tenga un recuento de la cantidad de filas dupelicadas, esto no es muy factible. Además, me gustaría minimizar mis consultas a la base de datos tanto como sea posible :) – Dox

0

Utilice el método ExecuteNonQuery, ya que la consulta no arroja ningún resultado. El método devuelve un número entero que es el número de filas afectadas.

Dim count As Integer = cmd.ExecuteNonQuery() 
Cuestiones relacionadas