Visual Basic.NET - Expediente X con datareader y transaccion

 
Vista:
sin imagen de perfil

Expediente X con datareader y transaccion

Publicado por Lacalum (1 intervención) el 10/07/2014 20:01:21
Hola a todos,
tengo un "expediente x " en el código que no acabo de resolver, la verdad es que me intriga por que no se porque me hace esto , por favor, si alguno ve el problema o alguna solución, la verdad es que son de estas cosas que no te explicas....por lo menos no lo veo.
El problema es el siguiente : en un procedimiento realizo una consulta a una BBDD Access a través del objeto OleDbCommand . Pues bien, ejecuto el ExecuteReader y DRProy.HasRows me indica que hay filas, se realiza el Read del DataReader pero DRProy(0) me devuelve que tiene valor DBNULL. La consulta la he lanzado en la BBDD y me devuelve un valor .Pero para mas inri, tengo el mismo procedimiento sin transacción (eliminando los que esta en negrita) y en este me funciona perfectamente , y no se están consultando datos que se están insertando en la transacción y aún así en este caso debería dar igual.

Al no obtenerme datos en la primera consulta , se introduce en la 2 consulta y aquí me pasa lo mismo, me devuelve datos y tras el read , el valor de DREECC(0) tiene un valor , pero en DREECC(1) me devuelve DBNULL, cuando debería ser imposible devolver valor en (0) y no tener valor en (1) ya que (0) es un contador.
LA consulta probada sobre la BBDD también funciona correctamente y devuelve datos para los 2 campos

!! AYUDA !!! por que me estoy volviendo loco

Public Function ObtenerSubProyecto(ByRef MiConexionAccess As OleDbConnection, ByRef transaccion As OleDbTransaction, ByVal codigo As String, ByVal codPais As String) As String
Dim cmConsContrato As New OleDbCommand
Dim cmConsProyecto As New OleDbCommand
Dim DRProy, DREECC As OleDb.OleDbDataReader
Dim sCodSubproyecto As String = ""
Dim sProyecto As String = ""


cmConsProyecto = New OleDbCommand("SELECT distinct(COD_SUBPROYECTO) from ACTUACION where CODIGO ='" + codigo + "' and COD_PAIS='" + codPais + "'", MiConexionAccess)
cmConsContrato = New OleDbCommand("SELECT count(Pais) ,COD_PROYECTO from (select distinct(COD_PAIS) ,COD_PROYECTO from ACTUACION where CODIGO ='" + codigo + "') group by COD_PROYECTO", MiConexionAccess)
cmConsProyecto.Transaction = transaccion
DRProy = cmConsProyecto.ExecuteReader
cmConsProyecto.Dispose()

If DRProy.HasRows Then
If (DRProy.Read) Then
If Not IsDBNull(DRProy(0)) Then
sCodSubproyecto = DRProy(0)

End If
End If
End If
DRProy.Close()
If (sCodSubproyecto = "") Then
cmConsContrato.Transaction = transaccion
DREECC = cmConsContrato.ExecuteReader
cmConsContrato.Dispose()
If Not DREECC.HasRows Then
sCodSubproyecto = "PR000005"
Else
If (DREECC.Read) Then
sCodSubproyecto = "SP00000000000" + DREECC(0).ToString + "5"
sProyecto = DREECC(1)
End If
End If
Log(String.Format("ObtenerSubProyecto : Info --> Se ha creado nuevo subproyecto {0} - : Proyecto={1} : ", sCodSubproyecto, sProyecto))
DREECC.Close()
End If
Return sCodSubproyecto
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder