Problemas con Datareader

20/09/2004 - 20:04 por Walter | Informe spam
Necesito antes de insertar una cierta cantidad de
registros que tengo en un excel en una base postgresql,
verificar que el email del usuario que voy a insertar no
exista previamente en la base, para lo cual dispondo de
una consulta en la cual voy verificando si el email que
traigo del excel existe en la base, lo descarto, sino
realizo el insert en la misma.


Este es el codigo que estoy usando, el tema es que cuando
ejecuto este codigo, me dice que ya tengo un datareader
abierto.

Sub alta_cuentas()
Dim oConn As OleDbConnection = New OleDbConnection
("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\Inscriptos.xls;Extended Properties=Excel 8.0;")
'traigo todos los campos
Dim oCmd As OleDbCommand = New OleDbCommand
("select * from VenadoTuerto", oConn)
Dim oDr As OleDbDataReader
oConn.Open()
Try
oDr = oCmd.ExecuteReader
Catch ex As Exception
MsgBox(ex.Message,
MsgBoxStyle.Critical, "Error")
End Try
'inicializo un objeto odbc Command
cn2.Open()
Dim cmd_insertar As OdbcCommand = New OdbcCommand
While oDr.Read 'Mientras existan registros
'MsgBox(oDr.Item("email"),
MsgBoxStyle.Information, "informacion")

Dim select_email As String = "select count
(email) as total from ecomm_clientes where email = '" &
oDr.Item("email") & "'"
Dim cmd_verclientes As OdbcCommand = New
OdbcCommand(select_email, cn2)
Dim dr_verclientes As OdbcDataReader
dr_verclientes = cmd_verclientes.ExecuteReader
dr_verclientes.Read()
If dr_verclientes.Item("total") = 0 Then
Try
Dim sql_insert As String = _
"insert into
ecomm_prueba
(nombre,apellido,direccion,telefono,email,fecha_ingreso)
values ('" & oDr.Item("nombre") & "','" & oDr.Item
("apellido") & "','" & oDr.Item("domicilio") & "','" &
oDr.Item("telefono") & "','" & oDr.Item("email") & "',now
()')" 'inserto en la base
cmd_insertar.CommandText = sql_insert
cmd_insertar.Connection = cn2
cmd_insertar.ExecuteNonQuery
() 'ejecuto la insercion
Catch ex As Exception

End Try
End If


End While
oConn.Close() 'cierro la conexion al Excel
cn2.Close() 'cierro la conexion a la base
postgresql
End Sub



Saludos y Muchas Gracias!!
Walter Arce
 

Leer las respuestas

#1 Jose Marcenaro
20/09/2004 - 22:28 | Informe spam
Mientras el DataReader dr_verclientes (que utiliza a cn2) permanece abierto,
esta conexión queda bloqueada.
Debes abrir nuevo objeto conexion para utilizarlo en cmd_insertar


Saludos
Jose Marcenaro

"Walter" escribió en el mensaje
news:250401c49f3c$4a8104c0$
Necesito antes de insertar una cierta cantidad de
registros que tengo en un excel en una base postgresql,
verificar que el email del usuario que voy a insertar no
exista previamente en la base, para lo cual dispondo de
una consulta en la cual voy verificando si el email que
traigo del excel existe en la base, lo descarto, sino
realizo el insert en la misma.


Este es el codigo que estoy usando, el tema es que cuando
ejecuto este codigo, me dice que ya tengo un datareader
abierto.

Sub alta_cuentas()
Dim oConn As OleDbConnection = New OleDbConnection
("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\Inscriptos.xls;Extended Properties=Excel 8.0;")
'traigo todos los campos
Dim oCmd As OleDbCommand = New OleDbCommand
("select * from VenadoTuerto", oConn)
Dim oDr As OleDbDataReader
oConn.Open()
Try
oDr = oCmd.ExecuteReader
Catch ex As Exception
MsgBox(ex.Message,
MsgBoxStyle.Critical, "Error")
End Try
'inicializo un objeto odbc Command
cn2.Open()
Dim cmd_insertar As OdbcCommand = New OdbcCommand
While oDr.Read 'Mientras existan registros
'MsgBox(oDr.Item("email"),
MsgBoxStyle.Information, "informacion")

Dim select_email As String = "select count
(email) as total from ecomm_clientes where email = '" &
oDr.Item("email") & "'"
Dim cmd_verclientes As OdbcCommand = New
OdbcCommand(select_email, cn2)
Dim dr_verclientes As OdbcDataReader
dr_verclientes = cmd_verclientes.ExecuteReader
dr_verclientes.Read()
If dr_verclientes.Item("total") = 0 Then
Try
Dim sql_insert As String = _
"insert into
ecomm_prueba
(nombre,apellido,direccion,telefono,email,fecha_ingreso)
values ('" & oDr.Item("nombre") & "','" & oDr.Item
("apellido") & "','" & oDr.Item("domicilio") & "','" &
oDr.Item("telefono") & "','" & oDr.Item("email") & "',now
()')" 'inserto en la base
cmd_insertar.CommandText = sql_insert
cmd_insertar.Connection = cn2
cmd_insertar.ExecuteNonQuery
() 'ejecuto la insercion
Catch ex As Exception

End Try
End If


End While
oConn.Close() 'cierro la conexion al Excel
cn2.Close() 'cierro la conexion a la base
postgresql
End Sub



Saludos y Muchas Gracias!!
Walter Arce

Preguntas similares