CONTENIDO CONTENIDO... 1 Tecnologías de conectividad (familias Windows) a bases de datos... 2 Ejemplos de conectividad... 3 DAO: Objetos de Acceso a Datos... 3 RDO: Objetos Remotos de Datos.... 3 Ejemplo paso a paso:... 4 ADO:Objetos de Datos ActiveX... 8 OLE DB... 12 ADO.NET... 16 Ejemplo 1. ADO.NET con proveedor SqlClient (SQL Server) realizado en C#... 17 Ejemplo 2. ADO.NET con proveedor OLE DB (SQL Server) realizado en C#... 18 Ejemplo 3. ADO.NET con proveedor ODBC (Bases de datos Access) realizado en C#... 19 Ejemplo 4. ADO.NET con proveedor ORACLE realizado en C#... 20 Ejemplo 5. ADO.NET con proveedor SqlClient (SQL Server) realizado en VB... 21 Ejemplo 6. ADO.NET con proveedor OLE DB (SQL Server) realizado en VB... 22 Ejemplo 7. ADO.NET con proveedor ODBC (Bases de datos Access) realizado en VB... 23 Ejemplo 84. ADO.NET con proveedor ORACLE realizado en VB... 24
Tecnologías de conectividad (familias Windows) a bases de datos Antes que nada sería bueno aclarar qué significa cada uno de los nombres. DAO: Objetos de Acceso a Datos RDO: Objetos Remotos de Datos. ADO:Objetos de Datos ActiveX OLE DB ADO.NET En ese orden fueron creados, DAO, RDO y ADO. DAO fue creado simplemente para acceder a bases de datos locales (en particular las de Access), y si bien esta tarea la cumple de forma muy eficiente con las antiguas versiones de Access, existen serios problemas para conectarse a bases de datos remotas o de nuevas versiones. Para esto surgió RDO. RDO permite conectar a bases de datos de forma remota a través de ODBC, restringiéndose a este tipo de conexión. De todas formas, al crearse un nuevo tipo de conectividad (OLE DB) el RDO queda obsoleto y surge como consecuencia al ADO, que es el estándar utilizado por VB 6 OLE DB (algunas veces escrito como OLEDB u OLE-DB) es la sigla de Object Linking and Embedding for Databases ("Enlace e incrustación de objetos para bases de datos") y es una tecnología desarrollada por Microsoft usada para tener acceso a diferentes fuentes de información, o bases de datos, de manera uniforme El ADO permite conectarse con cualquier proveedor OLE DB (incluyendo pero sin restringirse al ODBC), y tiene una performance en bases de datos locales y remotas muy superior al RDO. De todas formas el ADO ya ha quedado obsoleto en los nuevos sistemas y frameworks, obligando a Microsoft a poner a disposición de los desarrolladores el ADO.NET, que es el estándar actual. Si se está utilizando VB 6, ADO es tu única elección desde el punto de vista de la performance y facilidad de trabajo. ADO.NET : Proporciona acceso coherente a orígenes de datos como Microsoft SQL Server y XML, así como a orígenes de datos expuestos mediante OLE DB y ODBC. Las aplicaciones para usuarios que comparten datos pueden utilizar ADO.NET para conectar a estos orígenes de datos y recuperar, manipular y actualizar los datos contenidos.
Ejemplos de conectividad DAO: Objetos de Acceso a Datos DAO es una tecnología como se vió en la introducción orientada especialmente para bases de datos en local, típicamente para bases de datos Access, a continuación un enlace a un interesante recurso para la utilización de la tecnología en una aplicación Visual Basic accediendo a una base de datos Access. http://www.elguille.info/vb/bases/indicedao.asp RDO: Objetos Remotos de Datos. El ejemplo incluido en este artículo es un proyecto sencillo de Visual Basic que crea una conexión sin DSN con una base de datos de Oracle y ejecuta un procedimiento almacenado. Cuando se trabaja con Oracle y con el Controlador ODBC de Microsoft para Oracle, hay algunos valores de configuración que difieren de los que se usan con Microsoft SQL Server. Estas diferencias se deben a que se utiliza un controlador ODBC distinto. Visual Basic 5.0 y la edición Enterprise más reciente incluyen RDO 2.0 y el Controlador ODBC de Microsoft para Oracle. Es necesario instalar ambas herramientas para ejecutar el proyecto de ejemplo que se incluye en este artículo. NOTA: el controlador ODBC de Oracle no admite la característica RDO 2.0 completa (ni tampoco permite llamar a procedimientos almacenados ni enlazar los valores devueltos). El ejemplo siguiente se creó con una base de datos de Oracle 7.3 a través de una conexión de SQL*Net 2.3. El código siguiente (incluido el procedimiento almacenado) debería funcionar bien con Oracle 7.2. Sin embargo, en el archivo de Ayuda del Controlador ODBC de Microsoft para Oracle se indica que sólo admite SQL*Net 2.3. Es necesario crear dos objetos en la base de datos de Oracle: una tabla (rdooracle) y un procedimiento almacenado (rdoinsert). A continuación se muestran los scripts del lenguaje de definición de datos (DDL) para crear estos objetos: RDOORACLE: es simplemente una tabla de dos columnas con la primera establecida como clave principal: CREATE TABLE rdooracle ( item_number NUMBER(3) PRIMARY KEY, depot_number NUMBER(3));
RDOINSERT: este procedimiento acepta un solo parámetro de entrada numérico y devuelve un solo parámetro de salida numérico. El parámetro de entrada se usa primero en una instrucción de entrada que después se divide por 2 y se establece como parámetro de salida CREATE OR REPLACE PROCEDURE rdoinsert (insnum IN NUMBER, outnum OUT NUMBER) IS BEGIN INSERT INTO rdooracle (Item_Number, Depot_Number) VALUES (insnum, 16); outnum := insnum/2; END; NOTA: debe utilizar procedimientos que tengan parámetros de salida y no funciones cuando trabaje con parámetros de marcador de posición de RDO y Oracle. Los scripts anteriores se pueden ejecutar desde SQL*Plus o desde el complemento Visual Database Tools en Visual Basic 5.0 Enterprise Edition. Una vez creados estos objetos, puede crear el proyecto de Visual Basic que los utilizará. Ejemplo paso a paso: Este proyecto de ejemplo utiliza un formulario simple para enviar un parámetro de enlace al procedimiento almacenado RDOINSERT y, a continuación, devolver el parámetro de salida de ese procedimiento. A continuación se demuestra el procedimiento para crear el proyecto: 1. Abra un nuevo proyecto en Visual Basic 5.0 Enterprise Edition. De forma predeterminada, se crea Form1. 2. Coloque los controles siguientes en el formulario: Control Nombre Texto/título Button cmdcheck Check Button cmdsend Send Text Box txtinput
Label lblinput Input: 3. En el menú Herramientas, seleccione el elemento Opciones. Haga clic en la opción Vista de módulo completo predeterminada y, a continuación, haga clic en Aceptar. Esto le permitirá ver todo el código de este proyecto. 4. Pegue el código siguiente en la ventana de código: 5. Option Explicit 6. Dim Cn As rdoconnection 7. Dim En As rdoenvironment 8. Dim CPw As rdoquery 9. Dim Rs As rdoresultset 10. Dim Conn As String 11. Dim QSQL As String 12. Dim Response As String 13. Dim Prompt As String 14. 15. Private Sub cmdcheck_click() 16. 17. QSQL = "Select Item_Number, Depot_Number From rdooracle Where " _ 18. & "item_number =" & txtinput.text 19. Set Rs = Cn.OpenResultset(QSQL, rdopenstatic,, rdexecdirect) 20. 21. Prompt = "Item_Number = " & Rs(0) & ". Depot_Number = " _ 22. & Rs(1) & "." 23. 24. Response = MsgBox(Prompt,, "Query Results") 25. 26. Rs.Close 27. 28. End Sub 29. 30. Private Sub cmdsend_click() 31. 32. CPw(0) = Val(txtInput.Text) 33. CPw.Execute 34. 35. Prompt = "Return value from stored procedure is " & CPw(1) & "." 36. Response = MsgBox(Prompt,, "Stored Procedure Result") 37. 38. End Sub 39. 40. Private Sub Form_Load() 41. 42. Conn = "UID=;PWD=;driver={Microsoft ODBC Driver for Oracle};" _ 43. & "CONNECTSTRING=MyOracle;" 44.
45. Set En = rdoenvironments(0) 46. Set Cn = En.OpenConnection("", rddriverprompt, False, Conn) 47. QSQL = "{call rdoinsert(?,?)}" 48. Set CPw = Cn.CreateQuery("", QSQL) 49. 50. End Sub 51. 52. Private Sub Form_Unload(Cancel As Integer) 53. 54. En.Close 55. 56. End Sub 57. 58. Ejecute el proyecto. Cuando escribe un número en el cuadro de texto, txtinput, y hace clic en el botón "Send", se llama al procedimiento almacenado de Oracle, RDOINSERT. El número que escribió en el cuadro de texto se utiliza como parámetro de entrada para el procedimiento. El parámetro de salida se usa en un cuadro de mensaje que se llama después de que el procedimiento almacenado haya completado su proceso. Con su valor original todavía en el cuadro de texto, haga clic en el botón "Check". De esta forma se crea un conjunto de resultados sencillo, de sólo lectura, que se muestra en otro cuadro de mensaje. A continuación se explica detalladamente el código que se usa en este proyecto de demostración: El evento Form_Load contiene el código que crea la conexión sin DSN. También contiene el código que crea la consulta que llama al procedimiento almacenado: Private Sub Form_Load() End Sub Conn = "UID=;PWD=;driver={Microsoft ODBC Driver for Oracle};" _ & "CONNECTSTRING=MyOracle;" Set En = rdoenvironments(0) Set Cn = En.OpenConnection("", rddriverprompt, False, Conn) QSQL = "{call rdoinsert(?,?)}" Set CPw = Cn.CreateQuery("", QSQL) Observe que no está utilizando el objeto rdpreparedstatement. El objeto rdoquery ha reemplazado a este objeto. Esto es una novedad en RDO 2.0. Asimismo, con RDO 2.0, no tiene que crear explícitamente un objeto de conexión como se hace en este proyecto. Puede crear un objeto de consulta independiente que no esté asociado específicamente a una conexión. Para obtener más
información sobre esta funcionalidad, busque el objeto rdoquery en el archivo de Ayuda de Visual Basic 5.0 Enterprise Edition. La cadena de conexión que se usa para abrir una conexión a una base de datos de Oracle (o a cualquier base de datos) depende totalmente del controlador ODBC subyacente. Aunque la mayoría de los controladores ODBC (UID, PWD, etc.) utilizan parámetros similares, la cadena de conexión que se usa aquí sólo funcionará con el Controlador ODBC de Microsoft para Oracle: Conn = "UID=;PWD=;driver={Microsoft ODBC Driver for Oracle};" _ & "CONNECTSTRING=MyOracle;" La parte más importante de esta cadena de conexión es la palabra clave "CONNECTSTRING". Sólo la utiliza el Controlador ODBC de Microsoft para Oracle. En Microsoft SQL Server 6.5 se usa la palabra clave "SERVER". La cadena asignada a CONNECTSTRING es el alias de la base de datos que se configura en SQL*Net. Ésta es la única diferencia en la cadena de conexión al conectar con una base de datos de Oracle. Todos los demás parámetros operan según se describe en el archivo de Ayuda (en Objeto rdoconnection) con Visual Basic 5.0 Enterprise Edition. Como se afirma en el archivo de Ayuda, para una conexión no hay que especificar un DSN en la cadena de conexión. Además, en el evento Form_Load se encuentra el código que crea el objeto de consulta que llama al procedimiento almacenado: QSQL = "{call rdoinsert(?,?)}" Set CPw = Cn.CreateQuery("", QSQL) Con Oracle no puede especificar un valor devuelto para una llamada a un procedimiento almacenado como en Microsoft SQL Server 6.5; debe utilizar procedimientos almacenados que tengan parámetros de salida según se ha explicado anteriormente en este artículo. Los marcadores de posición de los parámetros se denotan en la cadena SQL mediante un signo de interrogación "?" y se hace referencia a los mismos en el orden en que aparecen en la cadena. Para obtener más información sobre el uso de marcadores de posición de parámetros en el objeto rdoquery, consulte el objeto rdoparameter en el archivo de Ayuda de Visual Basic 5.0 Enterprise Edition. El resto del proyecto es bastante sencillo y está bien documentado tanto en el archivo de Ayuda en pantalla como en los Libros en pantalla que se incluyen con Visual Basic 5.0. En este proyecto se han detallado los problemas de RDO elementales para trabajar con Oracle, la cadena de conexión y las llamadas a procedimientos almacenados. Para obtener más información sobre estos problemas, consulte la documentación de Oracle SQL*Net 2.3, el archivo de Ayuda para el Controlador ODBC de Microsoft para Oracle y la documentación del servidor de Oracle 7.
ADO:Objetos de Datos ActiveX Al intentar usar una base de datos creada o convertida con el Access 2000, se encuentra con que al intentar usar el Data control que se incluye en el Visual Basic no te permite hacerlo. Esto es porque el nuevo formato de Access usa el motor Jet versión 4.0 y los datacontrol DAO sólo "entienden" hasta la versión 3.5... Con la versión 6.0 de Visual Basic, o con las DLLs de ADO (ActiveX Data Object), se peude utilizar sin problemas... incluso con el ADO Datacontrol. En el siguiente código veremos cómo abrir y movernos en una base de datos, en este caso, lo mismo dará que la base de datos haya sido creada con Access 97 o con el Access 2000. Para empezar: Crea un nuevo proyecto, en Proyecto/Componentes... selecciona Microsoft ADO Data Control (OLEDB), pulsa Aceptar y verás que se añade un nuevo control a la barra de herramientas: Ese será el control que usaremos! Haz dobleclick en ese control para que se añada al formulario, cámbiale la altura a un valor pequeño: 315 está bien, sitúalo donde más coraje te de y añade un TextBox, cambia el tamaño, yo le he dado estos valores: alto 315, ancho 2955. Crea un array del Text1 recién añadido: Selecciona el Text1, pulsa el botón derecho y copialo; pulsa en cualquier lado del Form y pulsa el ratón derecho del ratón, selecciona Pegar... te preguntará si quieres crear un array del control Text1, responde que SI. Vuelve a pegar de nuevo y se creará un tercer Text1. Ahora tendrás tres controles Text1 con los índices desde 0 a 2 Si te parece demasiado "básico" todos estos pasos... te aguantas... y espera un poco que ya mismo termino. Ahora vamos a configurar el ADO datacontrol: Selecciona el datacontrol, en la ventana de propiedades pulsa en Custom... Te mostrará un cuadro de diálogo, (puede que si tienes la versión en castellano del VB, no te muestre lo que yo te digo, ya que la versión que tengo está en inglés, pero espero que no te lies...) En la ficha General, estará seleccionada la opción "Use Connection String", pulsa en el botón "Build..."
Te mostrará otro cuadro de diálogo, en la ficha "Provider", selecciona Microsoft Jet 4.0 OLE DB Provider, pulsa en "Next>>" y selecciona la base de datos que quieres usar, (si tienes la que están incluidas en el ZIP, se llamará db2000.mdb); el resto de opciones déjalos como está; pulsa en "Aceptar" dos veces para que se cierren los cuadros de diálogo. Ahora tenemos que decirle que tabla usar y otras cosillas. Selecciona la propiedad CursorType y de la lista desplegable selecciona 2- adopendynaset. Selecciona la propiedad RecordSource y pulsa en el botón, te mostrará un cuadro de diálogo. De la lista desplegable (Command type), selecciona: 2-adCmdTable, la lista "Table or Stored Procedure Name" se habrá habilitado, selecciona el nombre de la tabla que quieres usar, en este caso Table1 y pulsa en Aceptar. Esto mismo se puede hacer mediante código, para ello asígnale estos valores al datacontrol: (por ejemplo en el evento Form_Load) ' Indicar la base de datos a usar Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & App.Path & "\db2000.mdb" Adodc1.CursorType = adopendynamic ' Conectarlo a la tabla de prueba Adodc1.RecordSource = "Table1" ' Refresh es necesario para que se cargue la tabla Adodc1.Refresh Nota: En el código de ejemplo asignaremos en tiempo de ejecución la base de datos y demás conexiones necesarias. Ahora será necesario "ligar" los cuadros de texto con el Datacontrol y los campos correspondientes: Selecciona los tres Text1, en la ventana de propiedades selecciona DataSource y en la lista desplegable selecciona Adodc1 Para ligar cada Text1 con un campo de la base de datos:
Pulsa en cualquier parte del formulario para quitar la selección actual. Selecciona el Text1 con índice 0. En la ventana de propiedades, selecciona DataField y de la lista desplegable, selecciona "Nombre" Haz lo mismo con los otros dos Text1, pero para el de índice 1, selecciona "e-mail" y para el otro: "Comentario" Este último control sería conveniente que lo hicieras más grande y MultiLine, ya que se supone que aceptará textos más grandes porque el tipo de campo es "Memo" Ya puedes pulsar en F5 para probar que todo esto funciona. Realmente no es necesario añadir nada de código, pero si quieres hacerlo manualmente, añade lo siguiente en el evento Form_Load: Private Sub Form_Load() ' Indicar la base de datos a usar Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & App.Path & "\db2000.mdb" Adodc1.CursorType = adopendynamic ' Conectarlo a la tabla de prueba Adodc1.RecordSource = "Table1" ' Refresh es necesario para que se cargue la tabla Adodc1.Refresh ' Conectar manualmente los Text1 al recordset Dim i As Long ' Asignar el control data For i = 0 To 2 Set Text1(i).DataSource = Adodc1 Next ' Asignar los nombres de los campos Text1(0).DataField = "Nombre" Text1(1).DataField = "e-mail" Text1(2).DataField = "Comentario"
End Sub Para que el Caption del data control nos muestre el número de registro, en este caso el campo ID de la tabla, añade este código: Private Sub Adodc1_MoveComplete(ByVal adreason As ADODB.EventReasonEnum, _ ' Mostrar el ID del registro actual ByVal perror As ADODB.Error, _ adstatus As ADODB.EventStatusEnum, _ ByVal precordset As ADODB.Recordset) ' si se pasa del primero o del último, dará error On Local Error Resume Next ' Mostrar el ID del registro actual usando el recordset pasado como parámetro 'Adodc1.Caption = "ID del Registro: " & precordset!id ' También se puede usar: Adodc1.Caption = "ID del Registro: " & Adodc1.Recordset!ID End Sub Err = 0 Añadir y borrar registros de la tabla. Para tener estas dos opciones, añade dos botones al formulario, al primero lo llamas cmdadd y en el Caption escribe Añadir, al otro botón le cambias el nombre a cmddel y en el Caption escribe: Eliminar. Añade el siguiente código:
' Private Sub cmdadd_click() Adodc1.Recordset.AddNew End Sub Private Sub cmddel_click() End Sub Adodc1.Recordset.Delete Bueno, creo que con esto tienes para empezar, en otra ocasión te mostraré cómo hacer esto mismo pero sin usar el data control. En el zip con los listados hay otro proyecto que te permite seleccionar entre una base de Access 97 o una creada con Access 2000 OLE DB A continuación un ejemplo de VB.NET el cual utiliza conexión =LE DB Option Explicit On Imports System.Data.OleDb Public Class Form1 Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim cn As New OleDbConnection( _ "Provider=SQLOLEDB.1;" & _ "Integrated Security=SSPI; " & _ "Persist Security Info=False;" & _ "User ID=usuario;" & _ "Initial Catalog=base_prueba;" & _ "Data Source=(local)\SQLEXPRESS") ' Insertar registros en la tabla
Try Dim Sql As String = "INSERT INTO " & _ "Contactos(Nombre,Apellido,Email) " & _ "Values('" & TextBox1.Text & "','" & _ TextBox2.Text & "','" & _ TextBox3.Text & "')" cn.open() ' abre la conexión Dim cdo As New OleDbCommand(Sql, cn) cdo.executenonquery() 'visualizar el registro Dim da As New OleDbDataAdapter("SELECT * From contactos", cn) Dim ds As New DataSet da.fill(ds, "contactos") With DataGridView1.DataSource = ds.tables("contactos").refresh() End With Catch ex As Exception MsgBox(ex.Message.ToString) Finally ' si la conexión está abierta la cierra If cn.state = ConnectionState.Open Then cn.close() End If End Try End Sub Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Button1.Text = "Insertar registro" TextBox1.Text = "Nombre" TextBox2.Text = "Apellido"
TextBox3.Text = "Email" ' inicializa la conexión Dim cn As New OleDbConnection( _ "Provider=SQLOLEDB.1;" & _ "Integrated Security=SSPI; " & _ "Persist Security Info=False;" & _ "User ID=usuario;" & _ "Initial Catalog=;" & _ "Data Source=(local)\SQLEXPRESS") Try 'Comando para crear la base de datos sql : base_prueba Dim SQL As String = _ "IF EXISTS (" & _ "SELECT * " & _ "FROM master..sysdatabases " & _ "WHERE Name = 'base_prueba')" & vbcrlf & _ "DROP DATABASE base_prueba" & vbcrlf & _ "CREATE DATABASE base_prueba" ' Abrir la conexión cn.open() ' Inicializa el comando para ejecutar el sql Dim cdo As New OleDbCommand(SQL, cn) ' crear la bd cdo.executenonquery() ' crear una tabla con tres campos SQL = "USE base_prueba" & vbcrlf & _ "CREATE TABLE Contactos (" & _ "Nombre NVarChar(30) NOT NULL," & _ "Apellido NVarChar(15) NOT NULL," & _ "Email NVarChar(50))" cdo.commandtext = SQL cdo.executenonquery() ' ejecutar MsgBox("Se creo la base de datos prueba_bd con la tabla", _ MsgBoxStyle.Information)
' error Catch ex As Exception MsgBox(ex.Message.ToString) Finally If cn.state = ConnectionState.Open Then cn.close() ' cierra la conexión End If End Try End Sub End Class
ADO.NET ADO.NET 1 separa el acceso a datos de la manipulación de datos y crea componentes discretos que se pueden utilizar por separado o conjuntamente. ADO.NET incluye proveedores de datos de.net Framework para conectarse a una base de datos, ejecutar comandos y recuperar resultados. Los resultados se procesan directamente o se colocan en un objeto DataSet de ADO.NET con el fin de exponerlos al usuario para un propósito específico, combinados con datos de varios orígenes, o de utilizarlos de forma remota entre niveles. El objeto DataSet de ADO.NET también puede utilizarse independientemente de un proveedor de datos de.net Framework para administrar datos que son locales de la aplicación o que proceden de un origen XML. Las clases de ADO.NET se encuentran en el archivo System.Data.dll y están integradas con las clases de XML que se encuentran en el archivo System.Xml.dll. Cuando se compila un código que utiliza el espacio de nombres System.Data, es necesario hacer referencia a los archivos System.Data.dll y System.Xml.dll. ADO.NET proporciona funcionalidad a los programadores que escriben código administrado similar a la funcionalidad que los objetos ADO (ActiveX Data Objects) proporcionan a los programadores de modelo de objetos componentes (COM) nativo. Para obtener más información sobre las diferencias entre ADO y ADO.NET, veaado.net for the ADO Programmer en MSDN. A continuación se muestra una sencilla aplicación de ADO.NET que devuelve resultados desde un origen de datos y los escribe en la consola o en el símbolo del sistema. En los ejemplos de este tema se muestra cómo conectarse a datos y cómo recuperarlos mediante: a. el proveedor de datos de.net Framework para SQL Server (System.Data.SqlClient), b. el proveedor de datos de.net Framework para OLE DB (System.Data.OleDb), c. el proveedor de datos de.net Framework para ODBC (System.Data.Odbc) d. y el proveedor de datos de.net Framework para Oracle (System.Data.OracleClient). Es posible utilizar todos los proveedores de datos en una única aplicación, si así se desea. En el siguiente ejemplo de SqlClient se da por sentado que puede conectarse a la base de datos de ejemplo Northwind en Microsoft SQL Server 7.0 o posterior y se devuelve una lista de registros de la tabla Categories mediante un SqlDataReader. En los ejemplos de OleDb y Odbc se presupone una conexión a la base de datos de ejemplonorthwind de Microsoft Access. En el ejemplo de OracleClient se presupone una conexión a DEMO.CUSTOMER en un servidor Oracle. También debe agregarse una referencia a System.Data.OracleClient.dll. 1 http://msdn.microsoft.com/es-es/library/h43ks021(v=vs.80).aspx
Ejemplo 1. ADO.NET con proveedor SqlClient (SQL Server) realizado en C#
Ejemplo 2. ADO.NET con proveedor OLE DB (SQL Server) realizado en C#
Ejemplo 3. ADO.NET con proveedor ODBC (Bases de datos Access) realizado en C#
Ejemplo 4. ADO.NET con proveedor ORACLE realizado en C#
A continuación los mismos ejemplo, pero codificados en VB.NET Ejemplo 5. ADO.NET con proveedor SqlClient (SQL Server) realizado en VB
Ejemplo 6. ADO.NET con proveedor OLE DB (SQL Server) realizado en VB
Ejemplo 7. ADO.NET con proveedor ODBC (Bases de datos Access) realizado en VB
Ejemplo 84. ADO.NET con proveedor ORACLE realizado en VB