La Web del Programador: Comunidad de Programadores
 
    Pregunta:  63070 - CONECTAR BD ACCES DESDE C# EN MODO CONSOLA
Autor:  Germán M.
Hola gente. feliz año 2010.

Estoy haciendo una aplicación en c# modo consola, codigo, nombre apellidos, tel. etc etc. Pero ahora tengo el problema que no se como conectar la base de datos access y mucho menos como enviar los datos capturados en la consola . si me pueden echar una mano. muchas gracias. soy "novatillo" en c#.

  Respuesta:  Germán Murcia
Hola a todos, Ya encontre la forma de conectarme a una base de datos access 2003

PARA ENVIAR DATOS:

en cualquiera de los casos debe agregar la siguiente linea para conectarnos por OleDb

using System.Data.OleDb;

//hacemos la conexión por OleDb

OleDbConnection con = new OleDbConnection();
con.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:misdatoscolegio.mdb";
con.Open();

//el signo @ se utiliza para que reconozca las barras invertidas

//insertamos las variables

string q = "insert into estudiantes(curso,codigo,nombres,apellidos,telefono) values(@curso,@codigo,@nombres,@apellidos,@telefonos)";

OleDbCommand ORDEN;

ORDEN = new OleDbCommand(q, con);


ORDEN.Parameters.Add(new OleDbParameter("@curso", OleDbType.VarWChar, 4));// indica la cantidad de caracteres que ingresa
ORDEN.Parameters["@curso"].Value =curso;
ORDEN.Parameters.Add(new OleDbParameter("@codigo", OleDbType.VarWChar, 2));
ORDEN.Parameters["@codigo"].Value = codigo;
ORDEN.Parameters.Add(new OleDbParameter("@nombres", OleDbType.VarWChar, 20));
ORDEN.Parameters["@nombres"].Value = nombres;
ORDEN.Parameters.Add(new OleDbParameter("@apellidos", OleDbType.VarWChar, 20));
ORDEN.Parameters["@apellidos"].Value = apellidos ;
ORDEN.Parameters.Add(new OleDbParameter("@telefono", OleDbType.VarWChar, 10));
ORDEN.Parameters["@telefono"].Value = telefonos ;
ORDEN.Connection.Open();
ORDEN.ExecuteNonQuery();
ORDEN.Connection.Close();

*******************************************

PARA HACER UNA CONSULTA:

OleDbConnection con = new OleDbConnection();
con.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:misdatoscolegio.mdb";
con.Open();

System.Console.WriteLine("apellido a buscar:");
apellidos = System.Console.ReadLine();
Console.ReadLine();

string buscar = "SELECT * FROM estudiantes WHERE apellidos = '" + apellidos + "'";

OleDbCommand commando = new OleDbCommand(buscar, con);
System.Data.OleDb.OleDbDataReader concedula = commando.ExecuteReader();

int sw = 0;
while (concedula.Read())
{
sw = 1;
Console.WriteLine("curso : " + concedula.GetInt32(0));
Console.WriteLine("codigo : " + concedula.GetInt32(1));
Console.WriteLine("nombres : " + concedula.GetString(2));
Console.WriteLine("apellidos : " + concedula.GetString(3));
Console.WriteLine("telefono : " + concedula.GetInt32(4));
Console.ReadLine();
// Algo que aprendi aqui es que los valores que estan entre parentesis en la parte derecha conrresponde al orden de los campos en la tabla de access. en mi caso el orden es curso,codigo,nombres,apellidos,telefonos

}
if (sw == 0)
{
Console.WriteLine("nombre no existe");
Console.ReadLine();
}
concedula.Close();
con.Close();

*********************************************************
LES DEJO UNA CONSULTA ATRAVES DE INNER JOIN

es bastante util cuando se quiere mostrar información de dos tablas.

//Nos conectamos y abrimos la base de datos (ya lo explique arriba)

luego:
string buscar = "select * from estudiantes inner join periodos ON estudiantes.codigo=periodos.codigo";

// despues del from viene la primera tabla
// despues del inner join viene la segunda tabla
// despues del ON viene la relacion entre las dos tablas. que campos deben coincidir de cada tabla. en mi caso codigo. es fundamental que en ambas tablas esten los campos de coincidencia.

//ahora

OleDbCommand commando = new OleDbCommand(buscar, con);
System.Data.OleDb.OleDbDataReader concedula = commando.ExecuteReader();

while (concedula.Read())
{
sw = 1;
Console.WriteLine(" CURSO..............: " + concedula.GetInt32(0));
Console.WriteLine(" CODIGO.............: " + concedula.GetInt32(1));
Console.WriteLine(" NOMBRES............: " + concedula.GetString(2));
Console.WriteLine(" APELLIDOS..........: " + concedula.GetString(3));
Console.WriteLine(" TELEFONO...........: " + concedula.GetInt32(4));
Console.WriteLine(" PERIODO............: " + concedula.GetInt32(7));
Console.WriteLine(" NOTA...............: " + concedula.GetInt32(8));
Console.WriteLine(" TRABAJO REALIZADO..: " + concedula.GetString(9));

//la informacion la tengo un poco formateada para la presentación
// si el valor que recoge es string entonces seria .GetString, si es numerico entonces GetInt32

//recuerdan el orden de los campos en la tabla de access?
bueno. funciona lo mismo. explico
primero toma los campos de la tabla estudiantes y muestro las columnas que quiero, en este caso son (0,1,2,3,4) luego las columnas de la tabla periodos y muestro los campos (7,8,9), notaron que no estan 5 y 6, precisamente porque usted puede mostrar las columnas que quiera. en mi caso 5 y 6 vovian a hacer curso y codigo.

Nota: 5y6 corresponden a primera y segunda columna de la tabla peridos. por tanto no se vuelve a colocar (0,1,2 etc).

Console.WriteLine(" ===================================================");
Console.ReadLine();

}
if (sw == 0)
{
Console.WriteLine("No hay datos para leer");
Console.ReadLine();
}
concedula.Close();
con.Close();

Espero que haya valido la pena .