Cómo leer archivos planos con ADO.NET (versión Visual Basic 2005)
Hace poco más de un año escribí este artículo que describe una técnica para leer archivos planos utilizando el OleDB provider de ADO.NET. Es uno de los artículos de este sitio que ha recibido más comentarios, y entre ellos está uno que dejó fredy que me hizo re-hacer el ejemplo en Visual Basic 2005 para comprobar que no fuera un error de código—en realidad él hizo la mayor parte de la chamba para "traducir" la rutina.
No voy a explicar mucho la lógica del código—para eso te dejo de tarea que leas el artículo original—aquí simplemente te comparto cómo se vería la rutina en VB:
Imports System.IO
Imports System.Data
Imports System.Data.OleDb
Module Utilerias
Public Enum TipoDeArchivoPlano
Delimited
Fixed
End Enum
Public Function LeerArchivoPlano(ByVal archivo As FileInfo, _
ByVal tieneEncabezado As Boolean, _
ByVal tipoDeArchivo As TipoDeArchivoPlano) As DataTable
If (Not archivo.Exists) Then
Throw New FileNotFoundException("No se encontró el archivo especificado")
End If
Dim conEncabezado As String = IIf(tieneEncabezado, "YES", "NO")
Dim connectionString As String = _
String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};" + _
"Extended Properties='text;HDR={1};FMT={2}'", _
archivo.DirectoryName, conEncabezado, tipoDeArchivo.ToString())
Dim dt As DataTable = New DataTable("miTabla")
Using conn As OleDbConnection = New OleDbConnection(connectionString)
Using da As OleDbDataAdapter = New OleDbDataAdapter( _
"SELECT * FROM " + archivo.Name, conn)
da.Fill(dt)
End Using
End Using
Return dt
End Function
End Module
Para probarla, hice una aplicación sencilla en ASP.NET que mostrara los datos de un archivo .CSV que está dentro de un subdirectorio del sitio web.

El archivo jason.csv contiene:
Producto,Cantidad,Precio
Sierra eléctrica,1,250
Máscara de hockey,1,15.50
Machete,5,2.70
Detergente para ropa (con quita-manchas),1,10
Delantal,2,7.25
Afilador,3,5
La página dentro de la solución que en realidad solo tiene un GridView. Este es el contenido de Default.aspx:
<%@ Page Language="VB" AutoEventWireup="false"
CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Leer un archivo plano con VB 2005</title>
</head>
<body>
<form id="miFormulario" runat="server">
<div>
<asp:GridView ID="miGridView" runat="server">
</asp:GridView>
</div>
</form>
</body>
</html>
Finalmente, para mandar llamar la rutina y bindear—¿enlazar?—los datos al GridView, solo agregué esto en el code-behind:
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub miFormulario_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles miFormulario.Load
If Not Page.IsPostBack Then
Dim archivo As FileInfo = _
New FileInfo("D:\WebSites\LeerArchivosPlanosVB\Archivos\jason.csv")
Dim tabla As New DataTable
tabla = Utilerias.LeerArchivoPlano(archivo, True, TipoDeArchivoPlano.Delimited)
If tabla.Rows.Count > 0 Then
miGridView.DataSource = tabla
miGridView.DataBind()
Else
Response.Write("No hay datos para mostrar.")
End If
End If
End Sub
End Class
El resultado de correr la página:
Whew! Funcionó
Enjoy. 
PD. Puedes descargar el código de este ejemplo del sitio de la Comunidad .NET de Cd. Juárez.