Académique Documents
Professionnel Documents
Culture Documents
En este caso el nombre del proyecto es pracMVC. Note que debe ser el mismo
namespace que aparece en el archivo Program.cs
5. Si an no existe (ver en explorador de soluciones) aadir un archivo de
configuracin de aplicacin: App.config de la siguiente manera:
Men-> proyecto-> agregar nuevo elemento -> Archivo de configuracin de
aplicacin.
Se aadir el archivo XML App.config Para qu servir esto? Para el caso en que
que se tengan muchas llamadas a la base de datos, si se define la cadena de
conexin en el cdigo, cuando querramos cambiar el servidor de la conexin, ser
un lo pues habra que sustituir cada una de las connection strings. Para evitar esto,
se crea el archivo de configuracin de la aplicacin, donde se podr agregar desde
cadenas de conexin, hasta por ejemplo, colores de algn elemento visual. El
formato del App.config est en xml, por lo que se especifican etiquetas:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<appSettings>
<add key="MyConnectionString"
value="Data Source=CORP-0C81DC295D\SQLEXPRESS;Initial
Catalog=academica;Integrated Security=True"/>
</appSettings>
</configuration>
Base de Datos I
El valor que va en value es la cadena de conexin, que se la puede obtener
entrando a la base de datos (usando el explorador de servidores) y ver en
propiedades Cadena de conexin y copiar su contenido para pegarlo despus de
value=
En este caso la base de datos se llama academica
6. Para usar el archivo de configuracin, se debe agregar una nueva referencia, al
ensamblado System.Configuration, es por eso que en nuestro archivo
GestorDeBaseDeDatos.cs se tiene:
using System.Configuration
7. Ahora podemos usar el gestor de bases de datos para nuestra aplicacin. Por
ejemplo, podemos crear un formulario que nos permita aadir un registro a la tabla
materia, para hacerlo proceder como sigue:
a) Crear el formulario frmMateria
b) Aadir cajas de texto y etiquetas con todos los atributos que deseamos
aadir a la tabla materia as como el botn registrar:
Tatiana Aparicio
Base de Datos I
Note que en caso de que se violara la regla de integridad de entidad, o hubiera una falla al
abrir la conexin de la base de datos, no se realizara con xito la operacin, pero el gestor
de bases de datos capturara esta excepcin y nos devolvera en cantMatsInsertadas el
valor 0. A continuacin se presenta el mtodo del gestor que controla esto mediante la
sentencia try-catch:
public int EjecutarConsulta(string query)
{
int registrosAfectados = 0;
try // intenta ejecutar las siguientes sentencias
{
myConnection.Open();
myCommand = new SqlCommand(query, myConnection);
registrosAfectados = myCommand.ExecuteNonQuery();
return registrosAfectados;
}
catch (Exception) // si hay un error (por que no se pudo
//abrir la conexin o porque no se pudo
//insertar por la regla de integridad de
// entidad) retorna
{
return registrosAfectados;
}
Finally //cierra la conexin
{
if (myConnection.State != ConnectionState.Closed)
myConnection.Close();
}
}
8. Crear un formulario que permita ver los diferentes registros de la tabla alumno en
un datagrid.
Tatiana Aparicio
Base de Datos I
c) En el mtodo Load del formulario (doble clic en frmVerAlumno), cargar el
dataset y asociarlo al datagrid aadiendo el siguiente cdigo:
private void frmVerAlumnos_Load(object sender, EventArgs e)
{
dstAlumno =
GestorDeBaseDeDatos.Instance.EjecutarConsultaSelect("select * from alumno");
dgdAlumnos.ReadOnly=true;
dgdAlumnos.DataSource = dstAlumno;
dgdAlumnos.DataMember = dstAlumno.Tables[0].ToString();
}
9. Crear un formulario que nos permita ver los diferentes registros de la tabla materia
(uno cada vez), para hacerlo proceder como sigue:
a) Crear el formulario frmVerMateria
b) Aadir cajas de texto y etiquetas con todos los atributos que deseamos
recuperar de la tabla materia as como el botn Siguiente:
Tatiana Aparicio
Base de Datos I
e) Note que se tiene un procedimiento mostrarRegistro. Como necesitamos
hacerlo dos veces (al cargar el formulario y al presionar el botn siguiente),
es por esto que el cdigo para mostrar en el formulario un registro del
dataset se lo ha implementado en un procedimiento, que est ubicado en la
clase frmVerMaterias, inmediatamente despus del constructor:
private void mostrarRegistro(int nroReg) {
txtSigla.Text = dstMaterias.Tables[0].Rows[nroReg][0].ToString();
txtNomMat.Text = dstMaterias.Tables[0].Rows[nroReg][1].ToString();
txtArea.Text = dstMaterias.Tables[0].Rows[nroReg][2].ToString();
txtCreditos.Text=dstMaterias.Tables[0].Rows[nroReg][3].ToString();
}
Tatiana Aparicio
Base de Datos I
d) Modificar el constructor del formulario frmVerAlumno, de modo que
reciba como argumento valorCi, y guardarlo en un atributo del formulario
carnet (declarado al principio de la clase):
public frmVerAlumno(int valorCi)
{
InitializeComponent();
carnet=valorCi;
}
11. Implementar una opcin que permita desplegar los datos de los alumnos y permita
que los datos se puedan editar de la siguiente manera:
Haciendo clic en la fila del alumno que nos interesa editar, deber aparecer un
formulario que permita realizar la edicin, y al presionar el botn registrar
cambios los datos se actualizarn y se retornar a la pantalla inicial con los datos
modificados. Asimismo que se puedan aadir o borrar alumnos. Cabe indicar que
en este ejemplo suponemos que la tabla alumno de la base de datos contiene los
atributos ci, nom y sexo:
dgdAlumno
s
frmEditarAlumnos
Tatiana Aparicio
Base de Datos I
frmIngresarUNalumno
frmEditarUNalumno
Tatiana Aparicio
Base de Datos I
d) Para que en la tabla slo aparezcan los estudiantes que nos interesan, doble
click en el botn buscar y aadir el siguiente cdigo:
private void button1_Click(object sender, EventArgs e)
{
string sql = "select * from alumno where nom like '" + txtAlumno.Text +
"%'"; // si no funciona % use *
//string sql = "select * from alumno where nom = '" + txtAlumno.Text + "'";
dstAlumno = GestorDeBaseDeDatos.Instance.EjecutarConsultaSelect(sql);
try
{
dgdAlumnos.DataSource = dstAlumno;
dgdAlumnos.DataMember = dstAlumno.Tables[0].ToString();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message,"Error");
}
}
Tatiana Aparicio
Base de Datos I
a) Para que al seleccionar un estudiante ste se pueda editar, hacer doble clic
dentro del datagrid para implementar el mtodo cellContentClick del
datagrid y escribir el siguiente cdigo, que permitir editar el alumno
seleccionado:
private void dgdAlumnos_CellContentClick(object sender,
DataGridViewCellEventArgs e)
{
int posSel= e.RowIndex;
frmEditarUNalumno fEditarUNalumno = new
frmEditarUNalumno(dgdAlumnos,posSel,this);
fEditarUNalumno.ShowDialog();
}
Tatiana Aparicio
Base de Datos I
Note que en las ltimas dos lneas de cdigo cerramos los dos formularios
abiertos (el actual y el padre) y volvemos al men principal.
12. Idem al anterior, pero que el ci sea obtenido despus de seleccionar el nombre de
un estudiante en un combo box
13. Idem al anterior pero que adems muestre sus notas.
14. Permitir modificar los datos de un alumno.
Tatiana Aparicio
10
Base de Datos I
ANEXO 1: archivo GestorDeBaseDeDatos.cs:
using
using
using
using
using
using
using
using
System;
System.Collections.Specialized;
System.Collections.Generic;
System.Linq;
System.Text;
System.Data.SqlClient;
System.Data;
System.Configuration; // para usar el archivo XML App.config
// donde hemos guardado la cadena de conexin
using System.Windows.Forms;
namespace pracMVC
{
public class GestorDeBaseDeDatos
{
private static GestorDeBaseDeDatos instance = null;
private string myConnectionString;
private SqlConnection myConnection;
private SqlCommand mySelectCommand;
private SqlCommand myCommand;
private SqlDataAdapter myDataAdapter;
public SqlConnection MyConnection
{
get { return myConnection; }
}
public string MyConnectionString
{
get { return myConnectionString; }
set { myConnectionString = value; }
}
public GestorDeBaseDeDatos()
{
myConnectionString =
ConfigurationManager.AppSettings.Get("MyConnectionString");
myConnection = new SqlConnection(myConnectionString);
}
public static GestorDeBaseDeDatos Instance
{
get
{
if (instance == null)
instance = new GestorDeBaseDeDatos();
return instance;
}
}
public DataSet EjecutarConsultaSelect(string selectQuery)
{
DataSet myDataSet = new DataSet();
try
{
myConnection.Open();
mySelectCommand = new SqlCommand(selectQuery, myConnection);
myDataAdapter = new SqlDataAdapter();
myDataAdapter.SelectCommand = mySelectCommand;
myDataAdapter.Fill(myDataSet);
if (myDataSet != null)
{
if (myDataSet.Tables.Count != 0)
{
Tatiana Aparicio
11
Base de Datos I
if (myDataSet.Tables[0].Rows.Count != 0)
{
return myDataSet;
}
else
{
return null;
}
}
else
{
return null;
}
}
else
{
return myDataSet;
}
}
catch (Exception)
{
return null;
}
finally
{
if (myConnection.State != ConnectionState.Closed)
myConnection.Close();
}
}
public int EjecutarConsulta(string query)
{
int registrosAfectados = 0;
try
{
myConnection.Open();
myCommand = new SqlCommand(query, myConnection);
registrosAfectados = myCommand.ExecuteNonQuery();
return registrosAfectados;
}
catch (Exception)
{
return registrosAfectados;
}
finally
{
if (myConnection.State != ConnectionState.Closed)
myConnection.Close();
}
}
}
}
Tatiana Aparicio
12