martes, 3 de febrero de 2009

Haga su primer programa con C# Express Edition y SQL Server 2008 Express

Hacer una aplicación sencilla que lea y escriba datos en una tabla de SQL server 2008 Express Edition usando Visual C# Express Edition

Esta ayuda sirve para una persona con conocimientos básicos de C# y buenos conocimientos de programación sin importar que lenguaje haya usado. Espero comentarios por si algo no funciona.

Hacer un Diario Electrónico con C#

Pantalla Principal:






Debe tener instalado Visual C# Express Edition y SQL Server 2008 Express Edition

Crear un nuevo proyecto en C# y realizar los siguientes pasos:

En la pantalla que aparece a continuación adicionar todos los controles necesarios para que luzca igual que la muestra del inicio.

A continuación la estructura de la tabla a crear en SQL Server 2008:



Usted va a poder visualizar la información en un control datagridview y opcionalmente borrar. Explicación del primer tab:


Iniciar a codificar:

Pulse doble click sobre el botón con el título "Add button"
Adicionar el siguiente código: Cambiar Server por el nombre de su equipo y la instancia de sql server instalada en su computador al igual del nombre de la base de datos (si aplica)


private void button2_Click(object sender, EventArgs e)

{
//We're going to use oledb to access data
StringBuilder sb = new StringBuilder();
System.Data.OleDb.OleDbConnection con;
con = new System.Data.OleDb.OleDbConnection(@"Provider=
SQLNCLI10;Server=JOHN_LAPTOP\SQLEXPRESS;Database=MyDiary; Trusted_Connection=yes;");
try
{
con.Open();
OleDbCommand dbcom = con.CreateCommand();
OleDbDataAdapter daMyData = new OleDbDataAdapter(dbcom);
if (con.State != ConnectionState.Open)
{
con.Close();
MessageBox.Show("Can't open data connection, please try again later", "Check parameters");
return;
}

sb.Append("insert into MyEvent(Eventdate,Eventtime,EventObjective) values('");
sb.Append(dateTimePicker1.Value.ToShortDateString());
sb.Append("','");
sb.Append(hour.Value.ToString());
sb.Append(":");
sb.Append(min.Value.ToString());
sb.Append("','");
sb.Append(textBox1.Text);
sb.Append("')");
dbcom.CommandText = sb.ToString();
dbcom.ExecuteNonQuery();
Fillgrid();
lbllastaction.Text = "Added New Event";
}
catch (Exception ex)
{
lbllastaction.Text = ex.Message;
MessageBox.Show(ex.Message);
}

}

Este código lee la información puesta en los controles y adiciona un nuevo registro en la tabla dbo.MyEvent

Por favor verifique que los nombres de cada objeto sean iguales a los nombres que usa en el código, de lo contrario no va a compilar. O cambielos según su necesidad.

Código para el botón titulado "See Events List"

private void button3_Click(object sender, EventArgs e)

{
tabControl1.SelectTab("tabpage2");

StringBuilder sb = new StringBuilder();
System.Data.OleDb.OleDbConnection con;
con = new System.Data.OleDb.OleDbConnection(@"Provider=
SQLNCLI10;Server=JOHN_LAPTOP\SQLEXPRESS;Database=MyDiary; Trusted_Connection=yes;");
try
{
con.Open();
OleDbCommand dbcom = con.CreateCommand();
OleDbDataAdapter daMyData = new OleDbDataAdapter(dbcom);
if (con.State != ConnectionState.Open)
{
con.Close();
MessageBox.Show("Can't open data connection, please try again later", "Check parameters");
return;
}
sb.Append("select * from MyEvent order by idnumber desc");
dbcom.CommandText = sb.ToString();
dt.Clear();
daMyData.Fill(dt);
dgv1.DataSource = dt;

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}
A partir de este código vamos a generar una nueva función llamada Fillgrid() para que llene el grid cuando pulsamos ese botón o para cuando el usuario da click en el tab2.

Seleccione el código desde "stringbuilder sb... hasta catch { }", pulse click derecho y escoja la opción "Refactorizar", luego "Extraer método", escriba como nombre "Fillgrid", esto va a crear un nuevo método llamado: "Private void Fillgrid()"



Para que el datagridview funcione necesitamos crear un datatable. Para tener este lo vamos a crear en el inicio para que tenga funcionalidad en todo el proyecto. Ubique al inicio del código lo siguiente:


namespace MyDiary

{
public partial class Form1 : Form
{
DataTable dt = new DataTable();
//<---add here this line to let program see dt globally
public Form1()
{
InitializeComponent();
hour.Value = System.DateTime.Now.Hour;
//<--- puede adicionar esto para que se llene la hora y minutos al ejecutar la forma
min.Value = System.DateTime.Now.Minute;
} ... resto del código.....



Busque ahora en el tabpage2 el método Enter y adicione este código:


private void tabPage2_Enter(object sender, EventArgs e)
{
Fillgrid();
}

Para hacerlo dele click al tabpage 2 abajo de donde haya añadido el datagridview y
busque en la ventana de propiedades el rayito que simboliza los métodos,
lo ubica y le dá doble click.

Ahora borre la línea "Fillgrid();" del button3 porque ya no se va a necesitar.
Que quede solo lo tabcontrol1.selecttab("tabpage2");

private void button3_Click(object sender, EventArgs e)

{

tabControl1.SelectTab("tabpage2");

Fillgrid(); //<--delete this line, now when entering to tabpage2 it will populate the grid automatically
}

Code for delete button:


private void button1_Click_1(object sender, EventArgs e)
{
string sid = dt.Rows[dgv1.CurrentRow.Index]
         ["idnumber"].ToString();
if (sid.Length > 0)
{
StringBuilder sb = new StringBuilder();
System.Data.OleDb.OleDbConnection con;
con = new System.Data.OleDb.OleDbConnection(@"Provider=
         SQLNCLI10;Server=JOHN_LAPTOP\SQLEXPRESS;
         Database=MyDiary; Trusted_Connection=yes;");
try
{
con.Open();
OleDbCommand dbcom = con.CreateCommand();
OleDbDataAdapter daMyData = new OleDbDataAdapter(dbcom);
if (con.State != ConnectionState.Open)
{
con.Close();
MessageBox.Show("No se puede abrir la conexion,
                intente luego", "Verifique parametros");
return;
}
sb.Append("delete from MyEvent where idnumber='");
sb.Append(sid);
sb.Append("'");
dbcom.CommandText = sb.ToString();
dbcom.ExecuteNonQuery();
Fillgrid();
lbllastaction.Text = "Deleted Event with idnumber=" + sid;
}
catch (Exception ex)
{
lbllastaction.Text = ex.Message;
MessageBox.Show(ex.Message);
}

}
}

Este código borra el registro que está seleccionado y hace un refresh del grid.


Siendo esta mi primera entrega para desarrollo de aplicaciones usando C# Express Edition, espero comentarios para poder mejorar la próxima entrega.

John Harold.