Foros del Web » Programación para mayores de 30 ;) » .NET »

Cadena SQL con variables en VB.NET

Estas en el tema de Cadena SQL con variables en VB.NET en el foro de .NET en Foros del Web. Hola, miren tengo un problema increiblemente básico que me ha estado molestado durante varios días, la verdad hace mucho que deje de utilizar el vb ...
  #1 (permalink)  
Antiguo 06/07/2010, 11:02
 
Fecha de Ingreso: junio-2010
Mensajes: 14
Antigüedad: 13 años, 10 meses
Puntos: 0
Cadena SQL con variables en VB.NET

Hola, miren tengo un problema increiblemente básico que me ha estado molestado durante varios días, la verdad hace mucho que deje de utilizar el vb y ahora que lo necesito para un proyecto no puedo pasar de este error de novato, pero bueno el problema es este:
Trato de hacer una simple validacion de login conectandome al sql server, hasta aqui todo bien, el problema surge en la cadena SQL.

Código:
Imports System.Data.SqlClient
Imports System.Text

Public Class bienvenido

    Private Sub entrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles entrar.Click



        Dim usuarioTmp As String = FixString(Trim(Me.usuario.Text), "'", "''")

        Dim passwordTmp As String = FixString(Trim(Me.pass.Text), "'", "''")

        Dim cnString As String = My.Settings.CGADSConnectionString


        If usuarioTmp <> "" And passwordTmp <> "" Then

            Dim connection As New SqlConnection(cnString)

            Try
                connection.Open()
                Dim cadena_comando As String = "SELECT pass FROM usuarios WHERE usuario='" & usuarioTmp & "' AND pass='" & passwordTmp & "'"
                Dim command As SqlCommand = New SqlCommand(cadena_comando, connection)
                Dim myPassword As String = Trim(command.ExecuteScalar.ToString)
                
                If StrComp(myPassword, passwordTmp, CompareMethod.Binary) = 0 Then
                    connection.Close()
                    Me.DialogResult = Windows.Forms.DialogResult.OK
                    If Not Me.Modal Then Me.Close()
                Else
                    MsgBox("Ha ocurrido un error al momento de iniciar sesión.Intentelo mas tarde.")

                End If
            Catch ex As Exception
                MsgBox("Error " & Err.Number & " :" & ex.Message)

            Finally
                If connection IsNot Nothing AndAlso connection.State <> ConnectionState.Closed Then
                    connection.Close()
                End If
            End Try
        End If


    End Sub

    Private Function FixString(ByVal SourceString As String, ByVal StringToReplace As String, ByVal StringReplacement As String) As String
        SourceString = SourceString.Replace(StringToReplace, StringReplacement)
        Return SourceString
    End Function
End Class
Ese es mi codigo (no mio en realidad, lo tenia guardado, creo que lo obtuve de internet). El problema se presenta en la cadena SQL, el error que me muestra es
"referencia a objeto no establecida en instancia de un objeto",
esto lo se porque si pusiera "SELECT pass FROM usuarios" funciona bien, de igual manera si le pusiera directamente "SELECT pass FROM usuarios WHERE usuario='myuser' AND pass='mypass' ".

He intentado directamente con el valor Me.usuario.Text en la cadena SQL pero no funciona.
Gracias por su ayuda!
  #2 (permalink)  
Antiguo 06/07/2010, 11:26
 
Fecha de Ingreso: febrero-2010
Ubicación: México
Mensajes: 738
Antigüedad: 14 años, 2 meses
Puntos: 37
Respuesta: Cadena SQL con variables en VB.NET

Que cosa tan rara, haber fijate que valores te regresan las variables usuarioTmp y passwordTmp cuando ejecutas ese procedimiento porque puede ser que no te este regresando nada.

Pon tu cadena de conexión también, posiblemente no te estes conectando bien.
  #3 (permalink)  
Antiguo 06/07/2010, 11:45
 
Fecha de Ingreso: febrero-2007
Mensajes: 163
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Cadena SQL con variables en VB.NET

ExecuteScalar va con () porque es una funcion.
  #4 (permalink)  
Antiguo 06/07/2010, 16:17
 
Fecha de Ingreso: junio-2010
Mensajes: 14
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Cadena SQL con variables en VB.NET

usuarioTmp y passwordTmp regresan los valores adecuados, la cadena de conexion tiene el siguiente valor (esta almacenada en Settings.settings)
Data Source=SERVIDOR;Initial Catalog=CGADS;User ID=sa;Password=mypass y es de tipo connection string.
Ahora bien, tal como dijo osqar mi error era la falta de parentesis, con esto se resolvió el problema (pero solo cuando escribo un usuario y contraseña correcta), si pongo un usuario o una contraseña que no existe me marca el mismo error,siento que por fin veo la luz al final del tunel XD, seguire haciendo pruebas.

OFFTOPIC: Tendran de casualidad algun ebook o tutorial en el que explique base de datos con vb.net, he manejado base de datos antes, de hecho programo en php asi que entiendo la lógica y el comportamiento cuando se tratan con variables que obtienen informacion de una base de datos, el asunto es que no se como se hace en vb.net, ya saben hacer un recordset, recorrer todos los campos, obtener el valor de una columna, vaciar la informacion en un combobox, anidar combobox,etc...todo lo que tenga que ver con sintaxis y esas cosas.
  #5 (permalink)  
Antiguo 06/07/2010, 21:44
 
Fecha de Ingreso: febrero-2010
Ubicación: México
Mensajes: 738
Antigüedad: 14 años, 2 meses
Puntos: 37
Respuesta: Cadena SQL con variables en VB.NET

El error que te sigue apareciendo si los datos son erroneos es lógico porque no encuentra ningún registro con esos datos pero eso lo puedes solucionar mediante programación.
  #6 (permalink)  
Antiguo 07/07/2010, 08:45
 
Fecha de Ingreso: junio-2010
Mensajes: 14
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Cadena SQL con variables en VB.NET

Muchas gracias a todos por sus comentarios, he resuelto el problema, ha sido un poco frustrante saber programar y no poder verlo reflejado en el codigo debido a mi falta de practica en este lenguaje. escribo el codigo final.
Código:
Imports System.Data.SqlClient
Imports System.Text

Public Class bienvenido

    Private Sub entrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles entrar.Click



        Dim usuarioTmp As String = FixString(Trim(Me.usuario.Text), "'", "''")

        Dim passwordTmp As String = FixString(Trim(Me.pass.Text), "'", "''")

        Dim cnString As String = My.Settings.CGADSConnectionString


        If usuarioTmp <> "" And passwordTmp <> "" Then
            Dim flag As Boolean = True
            Dim connection As New SqlConnection(cnString)

            Try
                connection.Open()
            Catch ex As Exception
                MsgBox("Error " & Err.Number & " :" & ex.Message)
            End Try
            Try
                Dim cadena_comando As String = "SELECT pass FROM usuarios WHERE usuario='" & usuarioTmp & "' AND pass='" & passwordTmp & "'"
                Dim command As SqlCommand = New SqlCommand(cadena_comando, connection)
                Dim myPassword As String = Trim(command.ExecuteScalar().ToString)

            Catch ex As Exception
                flag = False
                MsgBox("Ha ocurrido un error al momento de iniciar sesión.Intentelo mas tarde.")
            Finally
                connection.Close()
                If flag = True Then
                    Dim pri As New principal
                    pri.Show()
                    If Not Me.Modal Then Me.Close()
                End If
            End Try
        End If


    End Sub

    Private Function FixString(ByVal SourceString As String, ByVal StringToReplace As String, ByVal StringReplacement As String) As String
        SourceString = SourceString.Replace(StringToReplace, StringReplacement)
        Return SourceString
    End Function
End Class

Etiquetas: sql, variables, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:42.