¿Cómo puedo abrir una tabla desde una función en .NET?
Saludos y un agradecimiento de antemano por dedicarle un tiempo a mi pregunta.
Tengo un código en VB6 que utilizo para abrir tablas de una base de datos en access y funciona bien, ahora que estoy migrando mi aplicación a .NET intento seguir con algunos métodos para ahorrar código, sin embargo me tope con este problema.
Este es mi código de vb6 que tengo en modulo General donde esta el código que usualmente se repite (este código funciona correctamente):
Function AbreTabla(Sentencia As String) As ADODB.Recordset
Dim rsTem As ADODB.Recordset
Set rsTem = New ADODB.Recordset
rsTem.CursorType = adOpenKeyset
rsTem.LockType = adLockOptimistic
rsTem.Open Sentencia, CnGeneral
Set AbreTabla = rsTem
End Function
Este código anterior lo uso de la siguiente forma:
Dim TUsuarios As ADODB.Recordset
Set TUsuarios = General.AbreTabla("SELECT * FROM usuarios")
Este es el código que intente usar en .NET (este es el código que no funciona) :
Function AbreTabla(ByVal Sentencia As String) As OleDbDataReader
Dim TextoError As String
Dim ok As String
Dim cmd As OleDbCommand = CnGeneral.CreateCommand()
cmd.CommandText = Sentencia
cmd.Connection = CnGeneral
Try
AbreTabla = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Catch ex As Exception
TextoError = Split(ex.Message, """")(0)
ok = MsgBox("Imposible abrir la tabla " & TextoError, MsgBoxStyle.Critical, "Error")
Finally
CierraDBGeneral()
End Try
End Function
Y asi es como la intento usar:
Dim TUsuarios As OleDbDataReader()
TUsuarios = General.AbreTabla("Select * from Usuarios")
y los errores que me envia son:
Warning1Function 'AbreTabla' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
Error2Value of type 'System.Data.OleDb.OleDbDataReader' cannot be converted to '1-dimensional array of System.Data.OleDb.OleDbDataReader'.
Datos adicionales:
Windows XP
Visual Studio 2005
.netframework 2.5
No tengo problemas con la apertura de la base de datos, ya verifique y se abre la base con los secuencias de conexión adecuadas.
Gracias.
Tengo un código en VB6 que utilizo para abrir tablas de una base de datos en access y funciona bien, ahora que estoy migrando mi aplicación a .NET intento seguir con algunos métodos para ahorrar código, sin embargo me tope con este problema.
Este es mi código de vb6 que tengo en modulo General donde esta el código que usualmente se repite (este código funciona correctamente):
Function AbreTabla(Sentencia As String) As ADODB.Recordset
Dim rsTem As ADODB.Recordset
Set rsTem = New ADODB.Recordset
rsTem.CursorType = adOpenKeyset
rsTem.LockType = adLockOptimistic
rsTem.Open Sentencia, CnGeneral
Set AbreTabla = rsTem
End Function
Este código anterior lo uso de la siguiente forma:
Dim TUsuarios As ADODB.Recordset
Set TUsuarios = General.AbreTabla("SELECT * FROM usuarios")
Este es el código que intente usar en .NET (este es el código que no funciona) :
Function AbreTabla(ByVal Sentencia As String) As OleDbDataReader
Dim TextoError As String
Dim ok As String
Dim cmd As OleDbCommand = CnGeneral.CreateCommand()
cmd.CommandText = Sentencia
cmd.Connection = CnGeneral
Try
AbreTabla = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Catch ex As Exception
TextoError = Split(ex.Message, """")(0)
ok = MsgBox("Imposible abrir la tabla " & TextoError, MsgBoxStyle.Critical, "Error")
Finally
CierraDBGeneral()
End Try
End Function
Y asi es como la intento usar:
Dim TUsuarios As OleDbDataReader()
TUsuarios = General.AbreTabla("Select * from Usuarios")
y los errores que me envia son:
Warning1Function 'AbreTabla' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
Error2Value of type 'System.Data.OleDb.OleDbDataReader' cannot be converted to '1-dimensional array of System.Data.OleDb.OleDbDataReader'.
Datos adicionales:
Windows XP
Visual Studio 2005
.netframework 2.5
No tengo problemas con la apertura de la base de datos, ya verifique y se abre la base con los secuencias de conexión adecuadas.
Gracias.
1 respuesta
Respuesta de Roberto Alvarado
1