none
¿Como mostrar la ventana "Seleccione origen de datos"?

    Pregunta

  • Buenas!

    Mi pregunta es, como desde código puedo llamar a la ventana que muestro en este link: http://www.sgtaller.com/images/odbc4.png y así poder conectarme a la fuente de origen que el usuario seleccionó y en la cual proporciona el usuario y la contraseña.

    Gracias,

    -Yordy

    viernes, 16 de diciembre de 2016 19:46

Respuestas

  • "Yordy Corrales" preguntó:

    > como desde código puedo llamar a la ventana que muestro en este link:
    > http://www.sgtaller.com/images/odbc4.png y así poder conectarme a la
    > fuente de origen que el usuario seleccionó y en la cual proporciona
    > el usuario y la contraseña.

    Hola:

    Salvo que haya algo por ahí que yo desconozca, tienes que referenciar en tu proyecto de Visual Basic .NET la clásica biblioteca de ADO. Para ello, abre el cuadro de diálogo Referencias... y busca la extensión ADODB, tal y como muestra la siguiente captura de pantalla correspondiente al cuadro de diálogo Referencias de Visual Studio 2015:


    Y ahora, cuando desees establecer una conexión con el origen de datos, ejecutarías lo siguiente:

    Imports System.Data.OleDb
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim cnn As New ADODB.Connection()
            Dim rst As New ADODB.Recordset()
    
            Try
                ' En la cadena de conexión especificamos el nombre del DSN.
                cnn.ConnectionString = "DSN=service"
    
                ' Indicamos que se muestre el cuadro de diálogo Seleccionar origen de datos.
                cnn.Properties("Prompt").Value = ADODB.ConnectPromptEnum.adPromptAlways
    
                ' Abrir la conexión.
                cnn.Open()
    
                ' Rellenar un objeto Recorset.
                rst.Open("SELECT * FROM NombreTabla", cnn, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockReadOnly)
    
                ' Crear un nuevo objeto DataTable.
                Dim dt As New DataTable()
    
                ' Crear un adaptador de datos.
                Dim da As New OleDbDataAdapter()
    
                ' Rellenar el objeto DataTable con los datos
                ' existentes en el objeto Recordset.
                da.Fill(dt, rst)
    
                ' Enlazar el objeto DataTable con un control DataGridView.
                DataGridView1.DataSource = dt
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            Finally
                If (rst.State <> 0) Then
                    ' Cerrar el objeto Recordset si está abierto.
                    rst.Close()
                End If
                rst = Nothing
    
                If (cnn.State <> 0) Then
                    ' Cerrar la conexión si está abierta.
                    cnn.Close()
                End If
                cnn = Nothing
    
            End Try
    
        End Sub

    Observa que cuando se ejecute el método Open del objeto Connection se mostrarán los cuadros de diálogo, y en el mismo orden, en el que aparecen en la siguiente captura:

    Si a la hora de crear el DSN se especificó que la autenticidad del inicio de sesión se realizara con la autenticación de Windows NT, el cuadro de diálogo Inicio de sesión mostrará marcada por defecto la casilla Usar conexión de confianza. Asimismo, también mostrará deshabilitado el nombre de la cuenta de usuario que se especificó a la hora de crear el DSN.

    Si tu intención es utilizar la autenticación del propio motor de datos (en el ejemplo he utilizado SQL Server), tienes que desmarcar la casilla Usar conexión de confianza para que se habiliten los cuadros Id. de inicio de sesión y Contraseña, o bien, especificar que se utilice la autenticación de SQL Server a la hora de crear el DSN.

    Por último te comento que si se cancela alguno de los dos cuadros de diálogo, se producirá una excepción del tipo System.Runtime.InteropServices.COMException con el mensaje de error Operación cancelada.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    sábado, 17 de diciembre de 2016 9:05
    Moderador
  • Te comento que si el nombre del DSN siempre va a ser el mismo, y éste solamente admite la autenticación del propio motor de datos (en el ejemplo comentado, la autenticación de SQL Server), tampoco es sumamente necesario que abras los cuadros de diálogo Seleccionar origen de datos e Inicio de sesión comentados anteriormente, los cuales requieren hacer uso de la clásica biblioteca de ADO, ya que puedes crearte tu propio formulario de inicio de sesión (para que el usuario especifique su inicio de sesión y contraseña) y utilizar en el código el proveedor de datos .NET para ODBC para conectarte con el DSN creado.

    El formulario de inicio de sesión en tiempo de ejecución sería algo parecido al siguiente:


    Y éste sería el código que tendrías que insertar en el mismo:

    Public Class FormLogOn
    
        Public Sub New()
    
            ' Esta llamada es exigida por el diseñador.
            InitializeComponent()
    
            ' Una vez llamado al método InitializaComponente, configurar los controles
            '
            Button1.DialogResult = DialogResult.OK
            Button2.DialogResult = DialogResult.Cancel
    
            Button1.Text = "&Aceptar"
            Button2.Text = "&Cancelar"
            Button2.UseVisualStyleBackColor = True
    
            Label1.Text = "&Usuario"
            Label2.Text = "&Contraseña"
    
            FormBorderStyle = FormBorderStyle.FixedDialog
            MaximizeBox = False
            MinimizeBox = False
            AcceptButton = Button1
            CancelButton = Button2
    
        End Sub
    
        Public ReadOnly Property Password As String
            Get
                Return TextBox2.Text
            End Get
        End Property
    
        Public ReadOnly Property User As String
            Get
                Return TextBox1.Text
            End Get
        End Property
    
    End Class


    Y cuando quieras establecer una conexión ODBC utilizando un DSN llamado service, ejecutarías lo siguiente:

    Imports System.Data.Odbc
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim cadenaConexionOdbc As String = String.Empty
    
            ' Abrir el cuadro de diálogo de inicio de sesión.
            '
            Using frm As New FormLogOn()
    
                Dim dr As DialogResult = frm.ShowDialog()
                If (dr <> DialogResult.OK) Then
                    ' Se ha cancelado el cuadro de diálogo;
                    ' abandonar el procedimiento actual.
                    Return
                End If
    
                ' Añadir a la cadena de conexión el inicio de sesión y la contraseña.
                cadenaConexionOdbc = $"DSN=service;UID={frm.User};PWD={frm.Password}"
    
            End Using
    
            Try
                Using cnn As New OdbcConnection(cadenaConexionOdbc)
                    Dim cmd As OdbcCommand = cnn.CreateCommand()
                    cmd.CommandText = "SELECT * FROM NombreTabla"
                    Dim da As New OdbcDataAdapter(cmd)
                    Dim dt As New DataTable()
                    da.Fill(dt)
                    DataGridView1.DataSource = dt
                End Using
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    sábado, 17 de diciembre de 2016 11:16
    Moderador

Todas las respuestas

  • "Yordy Corrales" preguntó:

    > como desde código puedo llamar a la ventana que muestro en este link:
    > http://www.sgtaller.com/images/odbc4.png y así poder conectarme a la
    > fuente de origen que el usuario seleccionó y en la cual proporciona
    > el usuario y la contraseña.

    Hola:

    Salvo que haya algo por ahí que yo desconozca, tienes que referenciar en tu proyecto de Visual Basic .NET la clásica biblioteca de ADO. Para ello, abre el cuadro de diálogo Referencias... y busca la extensión ADODB, tal y como muestra la siguiente captura de pantalla correspondiente al cuadro de diálogo Referencias de Visual Studio 2015:


    Y ahora, cuando desees establecer una conexión con el origen de datos, ejecutarías lo siguiente:

    Imports System.Data.OleDb
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim cnn As New ADODB.Connection()
            Dim rst As New ADODB.Recordset()
    
            Try
                ' En la cadena de conexión especificamos el nombre del DSN.
                cnn.ConnectionString = "DSN=service"
    
                ' Indicamos que se muestre el cuadro de diálogo Seleccionar origen de datos.
                cnn.Properties("Prompt").Value = ADODB.ConnectPromptEnum.adPromptAlways
    
                ' Abrir la conexión.
                cnn.Open()
    
                ' Rellenar un objeto Recorset.
                rst.Open("SELECT * FROM NombreTabla", cnn, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockReadOnly)
    
                ' Crear un nuevo objeto DataTable.
                Dim dt As New DataTable()
    
                ' Crear un adaptador de datos.
                Dim da As New OleDbDataAdapter()
    
                ' Rellenar el objeto DataTable con los datos
                ' existentes en el objeto Recordset.
                da.Fill(dt, rst)
    
                ' Enlazar el objeto DataTable con un control DataGridView.
                DataGridView1.DataSource = dt
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            Finally
                If (rst.State <> 0) Then
                    ' Cerrar el objeto Recordset si está abierto.
                    rst.Close()
                End If
                rst = Nothing
    
                If (cnn.State <> 0) Then
                    ' Cerrar la conexión si está abierta.
                    cnn.Close()
                End If
                cnn = Nothing
    
            End Try
    
        End Sub

    Observa que cuando se ejecute el método Open del objeto Connection se mostrarán los cuadros de diálogo, y en el mismo orden, en el que aparecen en la siguiente captura:

    Si a la hora de crear el DSN se especificó que la autenticidad del inicio de sesión se realizara con la autenticación de Windows NT, el cuadro de diálogo Inicio de sesión mostrará marcada por defecto la casilla Usar conexión de confianza. Asimismo, también mostrará deshabilitado el nombre de la cuenta de usuario que se especificó a la hora de crear el DSN.

    Si tu intención es utilizar la autenticación del propio motor de datos (en el ejemplo he utilizado SQL Server), tienes que desmarcar la casilla Usar conexión de confianza para que se habiliten los cuadros Id. de inicio de sesión y Contraseña, o bien, especificar que se utilice la autenticación de SQL Server a la hora de crear el DSN.

    Por último te comento que si se cancela alguno de los dos cuadros de diálogo, se producirá una excepción del tipo System.Runtime.InteropServices.COMException con el mensaje de error Operación cancelada.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    sábado, 17 de diciembre de 2016 9:05
    Moderador
  • Te comento que si el nombre del DSN siempre va a ser el mismo, y éste solamente admite la autenticación del propio motor de datos (en el ejemplo comentado, la autenticación de SQL Server), tampoco es sumamente necesario que abras los cuadros de diálogo Seleccionar origen de datos e Inicio de sesión comentados anteriormente, los cuales requieren hacer uso de la clásica biblioteca de ADO, ya que puedes crearte tu propio formulario de inicio de sesión (para que el usuario especifique su inicio de sesión y contraseña) y utilizar en el código el proveedor de datos .NET para ODBC para conectarte con el DSN creado.

    El formulario de inicio de sesión en tiempo de ejecución sería algo parecido al siguiente:


    Y éste sería el código que tendrías que insertar en el mismo:

    Public Class FormLogOn
    
        Public Sub New()
    
            ' Esta llamada es exigida por el diseñador.
            InitializeComponent()
    
            ' Una vez llamado al método InitializaComponente, configurar los controles
            '
            Button1.DialogResult = DialogResult.OK
            Button2.DialogResult = DialogResult.Cancel
    
            Button1.Text = "&Aceptar"
            Button2.Text = "&Cancelar"
            Button2.UseVisualStyleBackColor = True
    
            Label1.Text = "&Usuario"
            Label2.Text = "&Contraseña"
    
            FormBorderStyle = FormBorderStyle.FixedDialog
            MaximizeBox = False
            MinimizeBox = False
            AcceptButton = Button1
            CancelButton = Button2
    
        End Sub
    
        Public ReadOnly Property Password As String
            Get
                Return TextBox2.Text
            End Get
        End Property
    
        Public ReadOnly Property User As String
            Get
                Return TextBox1.Text
            End Get
        End Property
    
    End Class


    Y cuando quieras establecer una conexión ODBC utilizando un DSN llamado service, ejecutarías lo siguiente:

    Imports System.Data.Odbc
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim cadenaConexionOdbc As String = String.Empty
    
            ' Abrir el cuadro de diálogo de inicio de sesión.
            '
            Using frm As New FormLogOn()
    
                Dim dr As DialogResult = frm.ShowDialog()
                If (dr <> DialogResult.OK) Then
                    ' Se ha cancelado el cuadro de diálogo;
                    ' abandonar el procedimiento actual.
                    Return
                End If
    
                ' Añadir a la cadena de conexión el inicio de sesión y la contraseña.
                cadenaConexionOdbc = $"DSN=service;UID={frm.User};PWD={frm.Password}"
    
            End Using
    
            Try
                Using cnn As New OdbcConnection(cadenaConexionOdbc)
                    Dim cmd As OdbcCommand = cnn.CreateCommand()
                    cmd.CommandText = "SELECT * FROM NombreTabla"
                    Dim da As New OdbcDataAdapter(cmd)
                    Dim dt As New DataTable()
                    da.Fill(dt)
                    DataGridView1.DataSource = dt
                End Using
    
            Catch ex As Exception
                ' Se ha producido un error
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    sábado, 17 de diciembre de 2016 11:16
    Moderador
  • Excelente! esto es lo que buscaba muchas gracias por compartir tu conocimiento! buen día :)

    Yordy Corrales

    lunes, 19 de diciembre de 2016 15:02
  • Excelente, esta es la respuesta que buscaba. ¡Muchas Gracias!

    Yordy Corrales

    jueves, 12 de enero de 2017 0:41