martes, 10 de junio de 2014

Conectar una base de datos Sql Server con SQLCLIENT con VB.Net

Hola, en esta sección vamos a conectar la tabla "Producto" que se encuentra dentro de una base de datos "Almacen" que se encuentra creada en Sql Server, el código lo crearemos en Visual Basic.Net, y la forma en que nos conectaremos ahora será mediante SqlClient; para esto empezaremos por crear nuestro formulario.

Para esto utilizaremos Visual Studio 2008, y crearemos nuestro formulario, para ello nos vamos a nuestra barra de menú principal de Visual Studio 2008, y seleccionar:
Archivo, seguido de Nuevo Proyecto en seguida les presentará una ventana denominada “Nuevo Proyecto”, en donde en “Tipos de proyecto”, seleccionen el lenguaje con el que trabajaran que en este caso es Visual Basic; al lado se encuentra la sección de Plantillas, seleccione “Aplicación de Windows Forms”, en la parte de abajo donde se indica “Nombre”, capture el nombre que le dará al formulario en este caso le indicaremos “frmProductos” y presionas <Enter>.

Tu formulario se presenta, pero debemos darle una ubicación dentro de nuestro disco duro, por lo tanto seleccionaremos “Archivo”, “Guardar Proyecto”, se presentará una ventana en donde se pondrá el Nombre aunque ya este indicado “frmProductos”, abajo la ubicación en donde presionaremos el botón de comando “Examinar”, le presentará un explorador y seleccionara una carpeta o creara una para poder alojar la solución que va a crear.

El nombre de la solución debe ser el mismo que el nombre de arriba y después presione “Aceptar”. En el área de trabajo se tiene creado el formulario con el nombre de “Form1”, configúrelo dándole un nombre y un tamaño proporcional después seleccione del cuadro de herramientas un botón de comando, una etiqueta Label y un DataGridView.

Haga doble clic en el fondo del formulario y se encontrará en el área de trabajo de código, en donde le presenta una clase denominada “Productos” y que es una clase publica; posicione el cursor al principio de Public Class frmProductos y después teclee <Enter> unas tres o cuatro veces de tal forma que debe de quedar de la siguiente forma

Imports System
Imports System.Data
Imports System.Data.SqlClient


Public Class frmProductos

    Private Sub frmProductos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class

Después dentro de Public Class frmProductos, crear la función vsConex en donde creara la variable de conexión, una variable que permita recibir las instrucciones y parámetros como el SqlCommand y el SqlDataAdapter que recibe el SqlCommand construido, lo ejecuta y lo carga a una variable tipo tabla denominada DataSet como se muestra a continuación:

Function vsConex() As DataSet
        Dim oCnn As New SqlConnection("Data Source = DinamicoSys; Persist Security Info =false; Integrated Security = SSPI; User Id= sa; Password =; Initial Catalog = Almacen")
        Dim oCmd As New SqlCommand
        Dim oDa As New SqlDataAdapter
        Dim ds As New DataSet
        Dim strSql As String

        strSql = "Select * from producto"

        Try
            oCnn.Open()
            oCmd = New SqlCommand(strSql, oCnn)
            oCmd.Connection = oCnn
            oDa.SelectCommand = oCmd
            oDa.Fill(ds, "Producto")
            Return ds

        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            oCnn.Close()

        End Try
    End Function

Vea que al formar la conexión se esta creando una variable de conexión

Note que la function presenta un dato que debe regresar pero en este caso lo que regresa es un dataset como resultado, esto quiere decir que regresa un conjunto o grupo de datos de la tabla Productos. Por ello al retornar (Return) le indicamos el nombre de la variable dataset en este caso es “ds”.

Note que el código está encerrado en un Try…Catch por si hay algún error que me proporcione un mensaje de error, después cierra la variable de conexión oCnn.Close().

Ahora veamos el código en el botón denominado “Aceptar”, el código debe de tener una variable dataset para recibir el resultado de la función y la función como tal, seguido de un dataSource que proviene del grid para cargar los datos que se han traido y de esta manera poder mostrarlos.

Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptar.Click
        Dim dsRecibe As New DataSet

        dsRecibe = vsConex()
        dgDatos.DataSource = dsRecibe.Tables("producto")
End Sub

Note la carga que se efectúa en el DataSource del grid dgDatos.


Nos vemos hasta la próxima, espero que este código de ejemplo les sea de utilidad.

martes, 3 de junio de 2014

Conectar una base de datos Sql Server con ODBC

Hola, en este segmento te voy a mostrar como poder conectarte a una tabla de una base de datos que se encuentra en Sql Server, utilizando la forma de conexión por ODBC, para realizar una consulta.

Para poder conectar una base de datos que se encuentra en Sql Server, mediante ODBC utilizando el lenguaje de Visual Basic 6.0 debes de hacer lo siguiente:

Selecciona “Proyecto” en el menú principal de opciones del lenguaje de Visual Basic 6.0; después selecciona la opción denominada “Referencias”.

Te presenta una ventana el cual buscaras y seleccionaras la referencia denominada “Microsoft Remote Data Object 2.0” y la seleccionaras, en seguida presiona el botón de “Aceptar”.

Después posiciona tu cursor en medio de la ventana de formulario y entra a tu área de código, realizando doble click en el formulario que  ya tienes presente y listo para la creación de tu conexión ODBC con una base de datos ubicada en Sql Server.

Una vez que te encuentras en tu area de trabajo o área de código, ve al principio o inicio de tu área de de trabajo en donde se encuentran las declaraciones, ahí copia lo siguiente:

Option Explicit
Dim oEnn As rdoEnvironment
Dim oRnn As rdoConnection

Crea una variable oEnn para crear un objeto remoto que permitirá realizar una conexión remota.
Crea una variable oRnn para crear un objeto que permita hacer conexión remota con la base de datos a la cual te vas a conectar.

Después en tu formulario pero en el área de diseño de pantalla indica la etiqueta y una cuadricula utilizando el control MSFLEXGRID.

A tu etiqueta indícale el nombre de “Consulta de datos”, el grid proporciona el tamaño según los campos que indicarás, para este efecto lo ubico debajo de la etiqueta y le doy un ancho de izquierda a derecha de tal forma que pueda yo apreciar la información que se me presenta en cada columna.

El nombre del grid en este caso lo llamare “msgPers”

Después creó un botón de comando que me permita realizar la carga y presentación de la información en el grid, el cual lo llamare “Carga de Datos”.

Vuelve a entrar a tu área de trabajo y copia el siguiente código que  te indico:

En primera instancia crea una función, en este caso yo lo hice poniéndole el nombre de “vsCargaDatosOdbc”, después creo dos variables denominadas strConnect como un string y oRs como un recordset

Function vsCargaDatosOdbc() As Boolean
    Dim strConnect As String
    Dim oRs As rdoResultset
   
Indica una salida de error para cualquier eventualidad de fallo de conexión externo, que te ofrecerá una salida sin complicaciones, aún cuando no se haya efectuado la conexión.

    On Error GoTo vError
 
En seguida captura el string de conexion que te permitirá conectarte a la base de datos indicada.
En donde  “Driver={SQL Server}”, es el provider odbc que el lenguaje utiliza como motor de conexión o sea que medio estamos utilizando para conectarnos, de hecho si lo haces con otro tipo de motor esta parte cambia.

Server=SYSMEREDID, en esta parte se le indica a que servidor me estoy conectando y que es donde se encuentra mi Sql Server.

Database=Cafeterias, es el nombre de la base de datos a la que me voy a conectar y que se encuentra dentro de Sql Server.

Username=sa, capturar el nombre de usuario.

PWD= , si cuenta con una contraseña o password, es aquí donde se le debe indicar.

De tal forma que el string de conexión queda de la siguiente manera:
 
strConnect = "Driver={SQL Server}; server=SYSMEREDID;database=Cafeterias;Username=sa;PWD=;"
   
A continuación se crean los objetos oEnn, oRnn y el objeto oRs, además se ejecuta el objeto oRnn para indicar un tiempo límite en el que hará conexión para ello utilizamos la instrucción “Querytimeout = 600”.

    Set oEnn = rdoEngine.rdoEnvironments(0)
    Set oRnn = oEnn.OpenConnection(dsname:="", prompt:=rdDriverNoPrompt, ReadOnly:=False, _  Connect:=strConnect)
    oRnn.QueryTimeout = 600

La creación del objeto oRs es muy importante ya que es aquí donde se le indica que consulta se va a efectuar, es aquí donde le indicamos los campos, y la tabla a consultar, después le indicamos como traeremos o como se realizara dicha consulta.
   
    Set oRs = oRnn.OpenResultset(Name:="Select pers_usuario,pers_idusuario,pers_passw,pers_nombre,pers_appaterno,pers_apmaterno From caf_personal", _
        Type:=rdOpenForwardOnly, LockType:=rdConcurReadOnly, Options:=rdExecDirect)
       

Una vez que ya estamos conectados con la base de datos y ya efectuamos la consulta a una tabla en particular, preparamos nuestro grid con los campos que se solicitaron en la consulta a la tabla denominada “CAF_PERSONAL”.

    With msgPers
        .Clear
        .Rows = 2
        .FormatString = "Clave|Id. Usuario|Contraseña|Nombre|Ap. Paterno|Ap. Materno"
        .ColWidth(0) = 100
        .ColWidth(1) = 500
        .ColWidth(2) = 700
        .ColWidth(3) = 1200
        .ColWidth(4) = 1200
        .ColWidth(5) = 1200
    End With
   
    Después solo vaciamos el contenido de la información, resultado de la consulta realizada anteriormente en el grid “msgPers”, note como es cargado cada campo “oRs”, en cada celda del grid.

    Do While Not oRs.EOF
        msgPers.Col = 0
        msgPers.Text = oRs("pers_usuario")
        msgPers.Col = 1
        msgPers.Text = oRs("pers_idusuario")
        msgPers.Col = 2
        msgPers.Text = oRs("pers_passw")
        msgPers.Col = 3
        msgPers.Text = oRs("pers_nombre")
        msgPers.Col = 4
        msgPers.Text = oRs("pers_appaterno")
        msgPers.Col = 5
        msgPers.Text = oRs("pers_apmaterno")
        oRs.MoveNext
        If Not oRs.EOF Then
            msgPers.Rows = msgPers.Rows + 1
            msgPers.Row = msgPers.Row + 1
        End If
    Loop
   
Una vez que se ha cargado el grid, le indicamos que el ejercicio se realizo con exito por lo que le indicamos True o verdadero al nombre de la función ya que le regreso un dato booleano como indicación del resultado de dicho ejercicio; seguido del cierre de los objetos utilizados para tal efecto que son oRs, oRnn y oEnn, para después terminar la función con exit function.
  
    vsCargaDatosOdbc = True
    oRs.Close
    oRnn.Close
    oEnn.Close
   
    Exit Function
   
Esta es la parte donde el programa utilizará para absorber el error de falla de conexión, en donde le doy indicación de falso ya que no se efectuó la conexión y dando a la vez una salida que permita que el programa no falle, sino simplemente de una manera elegante presente un medio para indicar que la conexión no se realizo sin que truene o se corte la ejecución del programa.     

vError:
    vsCargaDatosOdbc = False
End Function


Nos vemos hasta la próxima, espero que este código de ejemplo les sea de utilidad.

domingo, 11 de septiembre de 2011

Conectar una base de datos de Access con Visual Basic.Net

Por: Víctor M. Saldaña Núñez
Sugiero que para las acciones de conexión a una base de datos siempre se realicen mediante una función, ya que de esta manera solo se ejerce la conexión, se efectúa el acceso y se lleva a cabo la solicitud deseada, se realiza en ese momento el proceso y después se cierra la conexión. Si es una consulta la información traída será guardada en una tabla o un DataSet que permitirá ser entregado como resultado de salida para después poder trabajar con la información contenida en cualquier otro evento que así se indique o se necesite, veamos el siguiente ejemplo:
En declaraciones generales poner:
 Imports System
 Imports System.Data
 Imports System.Data.OleDb
 Imports System.Windows.Forms

Después crear la siguiente función que permitirá traer un conjunto de registros:

Function clsLlenaCombo(ByVal pstrTipo As String, ByVal pstrSql As String, ByVal pNomTabla As String) As DataSet
        Dim oCnn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\Sicso\DbSicso\practica.mdb;Jet OLEDB:Database Password=IS345ABV;")
        Dim dsDatos As New DataSet

        Try
            oCnn.Open()
            If pstrTipo = "CargaDatos" Then
                Dim oCmd As New OleDbDataAdapter(pstrSql, oCnn)
                oCmd.Fill(dsDatos, pNomTabla)
            End If

        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            oCnn.Close()
            oCnn.Dispose()
            oCnn = Nothing
        End Try

        clsLlenaCombo = dsDatos

End Function
Y cargar los datos en un evento en el que podría encontrarse el siguiente código:
Dim dsEnt As DataSet
      Dim strSql As String

'*** Carga combo de Entidad
        strSql = "Select vEnt_Cve, vEnt_NombreEnt from sicso_Entidad"
        dsEnt = clsPrin.clsLlenaCombo("CargaDatos", strSql, "Entidad")
        cboEnt.DataSource = dsEnt.Tables("Entidad")
        cboEnt.DisplayMember = dsEnt.Tables("Entidad").Columns(1).ToString
        cboEnt.ValueMember = dsEnt.Tables("Entidad").Columns(0).ToString

o en su defecto si se desea traer solo los datos de un registro o un en su defecto un dato en especial podrá efectuarlo de la siguiente manera:
Function vsBuscador(ByVal pstrCadena As String, ByVal pstrClave As String) As Boolean
        Dim Ocnn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Sicso\DbSicso\practica.mdb;Jet OLEDB:Database Password= IS345ABV;")
        Dim Ocmd As New OleDbCommand
        Dim strCad As String
        Dim blnResultado As Boolean
        Try
            strCad = pstrCadena & pstrClave & "'"
            Ocmd = New OleDbCommand(strCad, Ocnn)
            Ocnn.Open()
            blnResultado = Ocmd.ExecuteScalar
            Return blnResultado

        Catch ex As Exception
            Throw New Exception(ex.Message)

        End Try
Y cargar los datos en un evento en el que podría encontrarse el siguiente código:
Public Function vsVerificaDatos(ByVal pOpcion As String, ByVal pstrUsuario As String, ByVal pstrContrasena As String) As String

Dim oCmd As New OleDbCommand
Dim strVerifica As String
Dim strSql As String

If pOpcion = "TraeUsuario" Then
strSql = "Select vUsua_NomEmp From Sicso_Usuario "
strSql = strSql & "Where vUsua_Nombre ='" & pstrUsuario & "' and "
strSql = strSql & "vUsua_Contrasena = '" & pstrContrasena & "'"
oCmd = New OleDbCommand(strSql, oCnn)
Else
            strVerifica = ""
End If
oCnn.Open()
strVerifica = oCmd.ExecuteScalar
vsVerificaDatos = strVerifica
End Function


Conectar una base de datos de Access con Visual Basic 6.0.

Escrito por: Víctor M. Saldaña Núñez
La forma de poder hacer conexión a una base de datos de Access con Visual basic es utilizando su motor de ADO de la siguiente manera:
Cuando estamos trabajando con Visual Basic ver. 6.0 , es importante hacer referencia a:
Microsoft ActiveX Data Objects 2.1 Library o en su defecto a  Microsoft ActiveX Data Objects 2.5 Library o en su defecto a Microsoft ActiveX Data Objects 2.6 Library.
Para esto seleccionaremos en el menú principal del lenguaje en la opción “Proyecto”, aparecerá el submenú y seleccionará la opción “Referencias”, les presentará una ventana donde se encontraran con las referencias que ya están seleccionadas mostrándose con una paloma en un cuadrito al principio y después las referencias que no están seleccionadas se mostraran con un cuadrito en blanco.
Una vez que se ha activado el acceso a esta referencia entonces ya se puede efectuar la creación de las variables que formaran parte en el proceso de conexión como son:
En el área de generales, poner abajo del option explicit lo siguiente:
Dim oCnn as new Adodb.Connection
Dim oRs as new Adodb.Recordset

Puedes realizarlo creando una función o un procedimiento de conexión exclusivamente, el siguiente ejemplo que indicare se efectuará en base a un procedimiento el cual cada vez que se desee crear la conexión solo se le llamará a este procedimiento. Para esto, deberá contener las siguientes instrucciones:
Sub sConecta()
strConex = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Textra\DbTextra\Hextras.mdb;Jet OLEDB:Database Password=heper2008"
    On Error GoTo Cierra_Conex
    With cnnConec
        .ConnectionString = strConex
        .ConnectionTimeout = 300
        .Open
        strMensaje = "Conectado"
        strRespuesta = MsgBox(strMensaje)
        Exit Sub
    End With
   
Cierra_Conex:
    Set cnnConec = Nothing
End Sub

El procedimiento “sConecta”, toma los datos del proveedor que se va a utilizar para abrir la conexión que en este caso es Microsoft.Jet.OLEDB.4.0; este permitirá abrir los archivos de Access 2000, 2003. El Proveedor Microsoft.Jet.OLEDB.3.5 permitirá abrir los archivos de Access 95 y 97, esto se dio de esta forma ya que según se fue avanzando y mejorando, Microsoft fue actualizando su proveedor de conexión para este tipo de archivo. Actualmente para hacer conexión a un archivo Access 2007 se utiliza con el siguiente Proveedor “Microsoft.ACE.OLEDB.12.0
Una vez que se tiene el procedimiento “sConecta”, puedes efectuar el acceso a una tabla dada de la base de datos conectada, efectuando por ejemplo una consulta, como se muestra en el siguiente ejemplo.

Private Sub cmdConsulta_Click()
   Call sConecta
    strSql = "Select * from hext_catper order by cper_nombrec"
    rsDato.Open strSql, cnnConec, adOpenDynamic, adLockOptimistic
    With rsDato
        .MoveFirst
        intNum = 0
        cboDatos.Clear
        cboDatos.AddItem ""
        cboDatos.ItemData(cboDatos.NewIndex) = intNum
        Do Until .EOF
            intNum = intNum + 1
            cboDatos.AddItem .Fields("cper_NombreC") & Space(10) & "|" & .Fields("cper_clave")
            cboDatos.ItemData(cboDatos.NewIndex) = intNum
            If .EOF Then
                Exit Do
            Else
                .MoveNext
            End If
        Loop
        rsDato.Close
        Set rsDato = Nothing
        Exit Sub
    End With
End Sub