Principales respuestas
¿Cómo pongo nombre a un formulario con datos que tengo en SQL?

Pregunta
-
Hola antes de nada
Lo que necesito es hacer que el formulario muestre como nombre un conjunto de parámetros que tengo en mi base de datos SQL. Lo he probado en CS y funciono, pero cuando trato de hacerlo en VB.NET no me da lo que necesito, es como si no encontrara lo que le mando a buscar.
Este es el código que uso:
Dim Mifuncion As New Funcion
Dim MyDatareader As SqlDataReader
MyDatareader = Nothing
Try
Mifuncion.con.Open()
Dim StrCmd = New SqlCommand("Select * from Compania", Mifuncion.con)
StrCmd.ExecuteReader()
If MyDatareader.HasRows Then
While (MyDatareader.Read)
Me.Text = "Facturación: " + Mifuncion.MyDatareader("E_Nombre").ToString() + " " + Mifuncion.MyDatareader("EID_impuesto").ToString() + ""
End While
End If
Catch ex As Exception
Me.Text = "Sin ID de impuesto"
Finally
Mifuncion.con.Close()
End Try
End SubSi es algún error en el código señálenmelo por favor, me seria de mucha ayuda
Panda Codes
- Editado Panda Codes miércoles, 7 de abril de 2021 14:19
- Cambiado EricRR miércoles, 7 de abril de 2021 18:09 SQL
Respuestas
-
Fíjate que primero declaras MyDataReader pero luego nunca lo asignas. Simplemente llamas a StrCmd.ExecuteReader, pero el resultado que te devuelve no se lo asignas a MyDataReader.
Por lo tanto, MyDataReader siempre vale Nothing, y da inmediatamente un error en cuanto que llamas a cualquiera de sus miembros. Concretamente, te dará un error de "Referencia a Objeto no establecida" en cuanto que llames a MyDataReader.HasRows. Desgraciadamente has puesto un Catch que intercepta la excepción y no hace nada para decirte cuál ha sido la excepción, sino que simplemente dice "Sin ID de impuesto". Esto es una mala práctica, porque siempre que haya un error te va a decir eso mismo, y entonces no te enteras de cuál ha sido el error.
Aparte de eso, hay otra cosa que no queda clara, y es la llamada a MiFuncion.con. MiFuncion está recién instanciada y nunca le metes nada en con. Vale, puede ser que lo haga internamente a través del constructor o que sea un método estático, pero no queda claro en el código llamante.
Después otro problema es que dentro del While llamas a Mifuncion.MyDatareader. Pero Mifuncion es una variable local recién instanciada. El MyDataReader al que tienes que acceder es el de la instancia actual, no es el que está dentro de la instancia referenciada por Mifuncion. Esto también te generará un error una vez superados los anteriores.
- Marcado como respuesta Panda Codes miércoles, 7 de abril de 2021 22:01
Todas las respuestas
-
Fíjate que primero declaras MyDataReader pero luego nunca lo asignas. Simplemente llamas a StrCmd.ExecuteReader, pero el resultado que te devuelve no se lo asignas a MyDataReader.
Por lo tanto, MyDataReader siempre vale Nothing, y da inmediatamente un error en cuanto que llamas a cualquiera de sus miembros. Concretamente, te dará un error de "Referencia a Objeto no establecida" en cuanto que llames a MyDataReader.HasRows. Desgraciadamente has puesto un Catch que intercepta la excepción y no hace nada para decirte cuál ha sido la excepción, sino que simplemente dice "Sin ID de impuesto". Esto es una mala práctica, porque siempre que haya un error te va a decir eso mismo, y entonces no te enteras de cuál ha sido el error.
Aparte de eso, hay otra cosa que no queda clara, y es la llamada a MiFuncion.con. MiFuncion está recién instanciada y nunca le metes nada en con. Vale, puede ser que lo haga internamente a través del constructor o que sea un método estático, pero no queda claro en el código llamante.
Después otro problema es que dentro del While llamas a Mifuncion.MyDatareader. Pero Mifuncion es una variable local recién instanciada. El MyDataReader al que tienes que acceder es el de la instancia actual, no es el que está dentro de la instancia referenciada por Mifuncion. Esto también te generará un error una vez superados los anteriores.
- Marcado como respuesta Panda Codes miércoles, 7 de abril de 2021 22:01
-
Muchísimas gracias.
En el caso de MiFuncion.con ahí llamo la base de datos. Lo que pasa es que la tengo en una clase aparte para no tener que escribir la cadena cada vez que necesite abrir la base de datos en algún formulario.
El nombre de la clase es Funcion y el con es la cadena de conexión de la base de datos. Si notas apenas de abre el Try dice: MiFuncion.con.Open() y cuando entra el Finaly: MiFuncion.con.Close()
Lo hago así porque a base de módulos y clases agiliza bastante el programa
Panda Codes
-
Bien, eso da lugar a otro posible error que podría estar ocurriendo: Si la cadena de conexión (o el servidor) está mal, se producirá una excepción al llamar a MiFuncion.con.Open(), y como está en el Try...Catch presentará el mismo error "Sin ID de impuesto". Por lo que, una vez más, llegamos a la conclusión de que interceptar los errores de esta manera nos deja sin información suficiente para averiguar qué es lo que está sucediendo.