Usaré para la conexión una base de datos en ACCESS 2007 llamada img, en donde se mostrarán los datos de la tabla imagen, cuyos campos son nombre_foto, comentarios y ruta_foto:
Aquí se usará el mismo proceso para crear nuestra cadena de conexión y así tenerla en el app.config, esto es: dar click derecho sobre nuestro proyecto en el Solution Explorer, escoger propiedades y luego la pestaña Settings, modificando los valores a fin que queden tal como se ve:
y el app.config quedará así:
xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
configSections>
<connectionStrings>
<add name="cnn" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents and Settings\XXXX\Escritorio\img.accdb"
providerName="System.Data.OleDb" />
connectionStrings>
configuration>
ahora no usaremos modulo pues estos no existen en C# ni tampoco usaremos una clase, mas bien añadiremos la referencia System.Configuration a nuestro proyecto y trabajaremos el cargado de los datos desde el evento Load del formulario, luego el código del form quedaría así:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Configuration;
namespace ACCESS_C__
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
OleDbConnection conn;
DataTable dt;
OleDbDataAdapter da;
BindingSource bs;
private void Form1_Load(object sender, EventArgs e)
{
string miCadenaConexion = System.Configuration.ConfigurationManager.ConnectionStrings["cnn"].ConnectionString;
using (conn =
new OleDbConnection(miCadenaConexion))
{
//cnn=new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source= C:\Documents and Settings\Pablo\Escritorio\img.accdb");
da = new OleDbDataAdapter("select * from imagen", conn);
dt = new DataTable("imagen");
da.Fill(dt);
bs = new BindingSource();
bs.DataSource = dt;
bindingNavigator1.BindingSource = bs;
dataGridView1.DataSource = bs;
textBox1.DataBindings.Add("text", bs, "nombre_foto");
textBox2.DataBindings.Add("text", bs, "comentarios");
textBox3.DataBindings.Add("text", bs, "ruta_foto");
}}}}
Siempre sobre el mismo proyecto creado anteriormente y usando el mismo string de conexion guardado en el app.config del proyecto, lo diferente esta vez será que usare una clase para conectarnos a la base de datos en ACCESS y además haremos el ACME(Actualizar, Consultar, Modificar y Eliminar) hacia el mismo archivo en ACCESS, para esto vamos a añadir una nueva clase al proyecto, así que damos click derecho al proyecto en el Solution Explorer, seleccionamos Add y luego Class
ahora, dentro de esta clase, copiamos el siguiente código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Windows.Forms;
namespace ACCESS_C__
{
class conexion
{
OleDbConnection cnn;
OleDbCommand cmd;
DataTable dt;
OleDbDataAdapter da;
string cadena=System.Configuration.ConfigurationManager.ConnectionStrings["cnn"].ConnectionString;
public DataTable CargarDatos()
{
using (cnn = new OleDbConnection(cadena))
{
da = new OleDbDataAdapter("select * from imagen", cnn);
dt = new DataTable();
da.Fill(dt);
return dt;
}
}
public void InsertarDatos(string val1, string val2, string val3){
cmd = new OleDbCommand();
cnn = new OleDbConnection(cadena);
cnn.Open();
cmd.Connection = cnn;
cmd.CommandText = "insert into imagen(nombre_foto, comentarios, ruta_foto) values (@nf, @cm, @rf)";
cmd.Parameters.AddWithValue("@nf", val1);
cmd.Parameters.AddWithValue("@cm", val2);
cmd.Parameters.AddWithValue("rf", val3);
cmd.ExecuteNonQuery();
MessageBox.Show("ingresados correcatmente");
cnn.Close();
cmd.Dispose();
}
public void EiminarDato(string val1) {
cmd = new OleDbCommand();
cnn = new OleDbConnection(cadena);
cnn.Open();
cmd.CommandText="delete from imagen where @id=id";
cmd.Connection = cnn;
cmd.Parameters.AddWithValue("@id", val1);
cmd.ExecuteNonQuery();
MessageBox.Show("eliminado correctamente");
cnn.Close();
cmd.Dispose();
}
public void modificardatos(string val1, string val2, string val3, string val4)
{
cnn = new OleDbConnection(cadena);
cmd=new OleDbCommand();
cnn.Open();
cmd.Connection = cnn;
cmd.CommandText = "update imagen set nombre_foto=@nf, comentarios=@com, ruta_foto=@rf where id=@id";
cmd.Parameters.AddWithValue("@nf", val1);
cmd.Parameters.AddWithValue("@com", val2);
cmd.Parameters.AddWithValue("@rf", val3);
cmd.Parameters.AddWithValue("id", val4);
cmd.ExecuteNonQuery();
MessageBox.Show("dato modicado correctamente");
cnn.Close();
cmd.Dispose();
}}}
también se modifico el formulario, agregándole botones representativos para realizar las operaciones sobre la base de datos, el diseño y el código correspondiente quedo así:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Configuration;
using System.Windows.Forms;
namespace ACCESS_C__
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
OleDbConnection conn;
DataTable dt;
OleDbDataAdapter da;
BindingSource bs;
conexion clase= new conexion();
private void Form1_Load(object sender, EventArgs e)
{
cargando();
void cargando()
{
bs = new BindingSource();
bs.DataSource = clase.CargarDatos();
dataGridView1.DataSource = bs;
bindingNavigator1.BindingSource = bs;
textBox1.DataBindings.Clear();
textBox2.DataBindings.Clear();
textBox3.DataBindings.Clear();
textBox4.DataBindings.Clear();
textBox1.DataBindings.Add("text", bs, "nombre_foto");
textBox2.DataBindings.Add("text", bs, "comentarios");
textBox3.DataBindings.Add("text", bs, "ruta_foto");
textBox4.DataBindings.Add("text", bs, "id");
}
private void Insertar_Click(object sender, EventArgs e)
{
clase.InsertarDatos(textBox1.Text, textBox2.Text, textBox3.Text);
cargando();
}
private void Eliminar_Click(object sender, EventArgs e)
{
clase.EiminarDato(textBox4.Text);
cargando();
}
private void bmodificar_Click(object sender, EventArgs e)
{
clase.modificardatos(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text);
cargando();
}}}
Compilamos, ejecutamos y ya.