SlideShare una empresa de Scribd logo
1 de 17
Descargar para leer sin conexión
Conexión a la base de datos desde 
Visual Studio y la arquitectura 
Modelo Vista Controlador (MVC) 
En esta práctica, estudiaremos como realizar la conexión a la base de datos desde una 
aplicación en C#. Después usando lo aprendido, crearemos una pequeña aplicación que 
interactúe con la base de datos usando un patrón arquitectónico llamado Modelo Vista 
Controlador. 
Antes de todo: 
Primeramente, debemos tener una base de datos donde trabajar. Para esto, inicie el SQL 
Managment Studio. 
Abra el script proporcionado, y ejecútelo, al final debería tener una base de datos equivalente 
a esta:
Conexión a la base de datos desde C# 
Ahora intentaremos realizar la conexión desde una aplicación en C# a la base de datos, para 
esto, usaremos una tecnología de la plataforma .NET, llamada ADO.NET, que significa ActiveX 
Data Object, para usar la tecnología y conectarse a la base de datos realice los siguientes 
pasos: 
1. Ingrese a Visual Studio 
2. Cree un proyecto en Consola para C# 
3. Dentro del método Main introduzca el siguiente código: 
static void Main(string[] args) 
{ 
string connectionString = "server=.SQLEXPRESS;" + 
4. Antes de ejecutar el código, observe la cadena de conexión. La cadena de conexión es 
un equivalente a la URL. En esta cadena uno debe indicar donde esta el servidor de la 
base de datos, y el nombre de la base de datos a acceder. Dependiendo como es la 
instalación de su servidor, la cadena de conexión puede variar. En el campo “server”, 
puede venir los siguientes ejemplos 
a. .SLQEXPRESS 
"integrated security=SSPI;" + 
"database=Universidad"; 
string sql = "SELECT TOP 10 nombre, apellido FROM Alumno"; 
SqlConnection conn = new SqlConnection(connectionString); 
conn.Open(); 
SqlCommand command = new SqlCommand(sql, conn); 
SqlDataReader reader = command.ExecuteReader(); 
while (reader.Read()) 
{ 
Console.WriteLine("{0}tt{1}", reader[0], reader[1]); 
} 
conn.Close(); 
}
b. .MSSQLSERVER 
c. Nompre-PCSQLEXPRESS 
d. .NombreInstancia 
5. En el campo database debe estar el nombre de la base de datos a acceder. 
6. Edite la cadena de conexión dependiendo como se acopla a su caso. 
7. Ejecute el programa. 
Responda las siguientes preguntas 
1. Que hace el programa? 
2. Que cree que hace el objeto SqlConnection? 
3. Que cree que hace el objeto SqlCommand? 
4. Que cree que hace el objeto SqlDataReader? 
Arquitectura Modelo Vista Controlador 
En el desarrollo de software existen los patrones arquitectónicos, modelos de diseño de 
software que permiten organizar mejor las clases y objetos de tal manera de crear programas 
con un buen diseño orientado a objetos. Uno de estos patrones se denomina el patrón 
Modelo Vista Controlador (MVC). Este patrón es usado bastante en el mundo del desarrollo de 
software. Muchos frameworks en varios lenguajes fueron desarrollados siguiendo esta 
arquitectura. Ejemplos de esto son: 
· ASP.NET MVC 
· Ruby on Rails 
· Java Server Faces 
La idea de esta arquitectura, es separar las responsabilidades de las clases y dividirlos en 
capas. Existe un objeto llamado el modelo. Que se ocupa de mantener la lógica de validación y 
que los objetos en el programa se mantengan en un estado consciente. Como parte del 
modelo, existe el manejo de los datos. Y como guardarlos por ejemplo en una base de datos, o 
en un archivo, dependiendo los requerimientos del sistema. 
Después del modelo. Tenemos las vistas. Estos objetos pertenecientes a la vista se ocupan de 
mostrar los datos de alguna manera al usuario. La idea de la arquitectura Modelo Vista 
Controlador es que fácilmente podamos cambiar las vistas. Por ejemplo de tener una vista que 
esta en Windows Forms, a una vista manejado como sistema web en ASP.NET o en consola. 
Al final existe una clase, llamada Controlador, que es la que se encarga de comunicar a la Vista 
con el Modelo. Este se encarga de mandar mensajes al modelo para que se actualice y los 
resultados mandarlos a la Vista, para que el usuario puede ver los resultados. 
En esa clase, se mostrara una implementación básica de la arquitectura Modelo Vista 
Controlador. 
Empecemos a implementar. 
Antes de todo, se supone que dentro de su servidor SQLServer ya ejecuto el script 
proporcionado y tiene una base de datos llamada Universidad.
1. Cree un proyecto de Windows Forms 
2. Dentro de este proyecto cree las siguientes carpetas 
a. Model 
b. View 
c. Controller 
d. Database 
3. Dentro de la carpeta Model cree una clase llamada Student, y una clase llamada 
ModelException 
4. En la clase ModelException introduzca el siguiente código: 
public class ModelException : Exception 
{ 
public ModelException(string msg) 
: base(msg) {} 
}
5. En la clase Student introduzca el siguiente código: 
public class Student 
{ 
private int ci; 
private string firstName; 
private string lastName; 
private DateTime birthday; 
private int cellphone; 
public Student() 
{ 
ci = 0; 
firstName = ""; 
lastName = ""; 
birthday = DateTime.Now; 
cellphone = 71234567; 
} 
public int CI { 
get 
{ 
return ci; 
} 
set 
{ 
if (value < 100000) 
throw new ModelException("El CI no es válido"); 
ci = value; 
} 
} 
public string FirstName 
{ 
get 
{ 
return firstName; 
} 
set 
{
if (String.IsNullOrEmpty(value)) 
throw new ModelException("El nombre no puede estar vacio"); 
if (value.Length > 30) 
throw new ModelException("El nombre no puede tener mas de 30 
carácteres"); 
firstName = value; 
} 
} 
public string LastName 
{ 
get 
{ 
return lastName; 
} 
set 
{ 
if (String.IsNullOrEmpty(value)) 
throw new ModelException("El apellido no puede estar 
vacio"); 
if (value.Length > 30) 
throw new ModelException("El apellido no puede tener mas de 
30 carácteres"); 
lastName = value; 
} 
} 
public DateTime Birthday 
{ 
get 
{ 
return birthday; 
} 
set 
{ 
if (value > DateTime.Now) 
throw new ModelException("La fecha de nacimiento aun no 
pasó!!"); 
birthday = value; 
} 
} 
public int CellPhone 
{ 
get 
{ 
return cellphone; 
} 
set 
{ 
if (value < 60000000 || value > 80000000) 
throw new ModelException("Celular no valido"); 
cellphone = value; 
} 
} 
}
6. Antes de seguir. Revise y estudie el código y responda las siguientes preguntas: 
a. Que representa la clase Student? 
b. Que se hace en las funciones set/get de la clase? 
c. Como se reporta errores en el modelo? 
7. Dentro de la carpeta cree una clase llamada ConnectionManager. La responsabilidad 
de esta clase será la encargada de mantener la cadena de conexión, Conectarse a la 
base de datos y dar una manera de ejecutar comandos SQL a las otras clases. La clase 
es como sigue: 
public class ConnectionManager : IDisposable 
{ 
private string connectionString = "server=.SQLEXPRESS;" + 
8. Antes de continuar, responda, los objetos usados en esta clase le parecen familiar? 
9. Cree una clase DatabaseException. El código de la clase sigue asi: 
public class DatabaseException : Exception 
{ 
public DatabaseException(string message) : 
base(message) { } 
} 
10. Cree una clase dentro de la carpeta Database llamada StudentsDatabase, el código de 
la clase es como sigue: 
"integrated security=SSPI;" + 
"database=Universidad"; 
private SqlConnection connection; 
public ConnectionManager() 
{ 
connection = new SqlConnection(connectionString); 
connection.Open(); 
} 
public SqlCommand GetCommand(string sql) 
{ 
return new SqlCommand(sql, connection); 
} 
public void Dispose() 
{ 
connection.Close(); 
connection.Dispose(); 
}
public class StudentsDatabase : IDisposable 
{ 
private ConnectionManager connection; 
public StudentsDatabase() 
{ 
connection = new ConnectionManager(); 
} 
public Student GetUserByCI(int CI) 
{ 
try 
{ 
String sql = "SELECT * FROM Alumno WHERE CI = @CI"; 
SqlCommand command = connection.GetCommand(sql); 
command.Parameters.AddWithValue("@CI", CI); 
SqlDataReader reader = command.ExecuteReader(); 
if (reader.HasRows) 
{ 
reader.Read(); 
Student student = new Student 
{ 
CI = Convert.ToInt32(reader[0]), 
FirstName = Convert.ToString(reader[1]), 
LastName = Convert.ToString(reader[2]), 
Birthday = Convert.ToDateTime(reader[3]), 
CellPhone = Convert.ToInt32(reader[4]) 
}; 
reader.Close(); 
return student; 
} 
reader.Close(); 
} 
catch (Exception exception) 
{ 
throw new DatabaseException("Error en la base de datos: " + 
exception.Message); 
} 
return null; 
} 
public void CreateNewStudent(Student student) 
{ 
try 
{ 
String sql = "INSERT INTO Alumno (CI, nombre, apellido, fechanac, 
celular) " + 
"VALUES (@CI, @firstname, @lastname, @birthday, 
@cellphone)"; 
SqlCommand command = connection.GetCommand(sql); 
command.Parameters.AddWithValue("@CI", student.CI); 
command.Parameters.AddWithValue("@firstname", student.FirstName); 
command.Parameters.AddWithValue("@lastname", student.LastName); 
command.Parameters.AddWithValue("@birthday", student.Birthday); 
command.Parameters.AddWithValue("@cellphone", student.CellPhone);
int rows = command.ExecuteNonQuery(); 
if (rows == 0) 
throw new DatabaseException("Error en la base de datos"); 
} 
catch (Exception exception) 
{ 
throw new DatabaseException("Error en la base de datos: " + 
exception.Message); 
} 
} 
public void UpdateStudent(Student student) 
{ 
try 
{ 
String sql = "UPDATE Alumno SET" + 
"nombre = @firstname, " + 
"apellido = @lastname, " + 
"fechanac = @fechanac, " + 
"celular = @cellphone " + 
"WHERE CI = @CI"; 
SqlCommand command = connection.GetCommand(sql); 
command.Parameters.AddWithValue("@CI", student.CI); 
command.Parameters.AddWithValue("@firstname", student.FirstName); 
command.Parameters.AddWithValue("@lastname", student.LastName); 
command.Parameters.AddWithValue("@birthday", student.Birthday); 
command.Parameters.AddWithValue("@cellphone", student.CellPhone); 
int rows = command.ExecuteNonQuery(); 
if (rows == 0) 
throw new DatabaseException("Error en la base de datos"); 
} 
catch (Exception exception) 
{ 
throw new DatabaseException("Error en la base de datos: " + 
exception.Message); 
} 
} 
public void DeleteStudentByCI(int CI) 
{ 
try 
{ 
String sql = "DELETE FROM Alumno " + 
"WHERE CI = @CI"; 
SqlCommand command = connection.GetCommand(sql); 
command.Parameters.AddWithValue("@CI", CI); 
int rows = command.ExecuteNonQuery(); 
if (rows == 0) 
throw new DatabaseException("Error en la base de datos"); 
} 
catch (Exception exception) 
{ 
throw new DatabaseException("Error en la base de datos: " + 
exception.Message); 
} 
}
public List<Student> GetAllStudents() 
{ 
List<Student> students = new List<Student>(); 
try 
{ 
String sql = "SELECT * FROM Alumno"; 
SqlCommand command = connection.GetCommand(sql); 
SqlDataReader reader = command.ExecuteReader(); 
while(reader.Read()) 
{ 
11. Deténgase en esta clase, analice el código y responda las siguientes preguntas: 
a. Que responsabilidades tiene esta clase? 
b. Que hace cada método de la clase? 
c. Como se ejecutan las sentencias SQL? 
d. Como se reportan errores de la base de datos al programa? 
e. Como se busca un objeto en la base de datos? 
f. Como se inserta un nuevo objeto en la base de datos? 
g. Como se elimina un objeto en la base de datos? 
h. Como se edita un objeto en la base de datos? 
i. Investigue un poco mas acerca de las sentencias SQL preparadas. Que ventajas 
tiene usar este tipo de sentencias? Ve alguna sentencia SQL Preparada en esta 
clase? 
12. En la carpeta View cree una carpeta llamada Student, dentro de este cree los 
siguientes formularios: 
Student student = new Student 
{ 
CI = Convert.ToInt32(reader[0]), 
FirstName = Convert.ToString(reader[1]), 
LastName = Convert.ToString(reader[2]), 
Birthday = Convert.ToDateTime(reader[3]), 
CellPhone = Convert.ToInt32(reader[4]) 
}; 
students.Add(student); 
} 
} 
catch (Exception exception) 
{ 
throw new DatabaseException("Error en la base de datos: " + 
exception.Message); 
} 
return students; 
} 
public void Dispose() 
{ 
connection.Dispose(); 
} 
}
a. StudentMenu: 
b. RegisterStudentForm
c. ShowStudentForm 
d. EditStudentForm 
13. En los formularios de, Editar Alumno, Buscar Alumno y Registrar Alumno cree los 
siguientes métodos (Cambie el nombre de los objetos dependiendo como usted llamo 
a sus controles al crear los formularios):
public (Nombre_Constructor)(StudentController theController) 
{ 
InitializeComponent(); 
controller = theController; 
} 
public String CI 
{ 
get 
{ 
return ciTextBox.Text; 
} 
set 
{ 
ciTextBox.Text = value; 
} 
} 
public String FirstName 
{ 
get 
{ 
return firstNameTextBox.Text; 
} 
set 
{ 
firstNameTextBox.Text = value; 
} 
} 
public String LastName 
{ 
get 
{ 
return lastNameTextBox.Text; 
} 
set 
{ 
lastNameTextBox.Text = value; 
} 
} 
public String BirthDay 
{ 
get 
{ 
return birthdayDate.Text; 
} 
set 
{ 
birthdayDate.Text = value; 
} 
}
public String Cellphone 
14. Cree una clase dentro de la carpeta Controller una clase llamada StudentController, el 
código de la clase es como sigue: 
public class StudentController : IDisposable 
{ 
private StudentMenu studentMenu; 
private StudentsDatabase model; 
public StudentController(StudentMenu menu) 
{ 
studentMenu = menu; 
model = new StudentsDatabase(); 
} 
public void ShowRegisterStudent() 
{ 
studentMenu.Hide(); 
RegisterStudentForm register = new RegisterStudentForm(this); 
register.Show(); 
} 
public void RegisterStudent(RegisterStudentForm registerForm) 
{ 
try 
{ 
Student student = new Student(); 
student.CI = Convert.ToInt32(registerForm.CI); 
student.FirstName = registerForm.FirstName; 
student.LastName = registerForm.LastName; 
student.Birthday = Convert.ToDateTime(registerForm.BirthDay); 
student.CellPhone = Convert.ToInt32(registerForm.Cellphone); 
if (model.GetUserByCI(student.CI) != null) 
{ 
throw new Exception("El Estudiante ya ha sido registrado"); 
} 
{ 
get 
{ 
return cellphoneTextBox.Text; 
} 
set 
{ 
cellphoneTextBox.Text = value; 
} 
} 
public void ShowError(String message) 
{ 
MessageBox.Show(message, "Error", MessageBoxButtons.OK, 
MessageBoxIcon.Error); 
}
model.CreateNewStudent(student); 
registerForm.Hide(); 
registerForm.Dispose(); 
studentMenu.Show(); 
} 
catch (Exception ex) 
{ 
registerForm.ShowError(ex.Message); 
} 
} 
public void Dispose() 
{ 
model.Dispose(); 
} 
} 
15. Dentro del formulario StudentMenu, edite el código e introduzca el siguiente código: 
private StudentController controller; 
private PrincipalMenu principal; 
public StudentMenu(PrincipalMenu principalMenu) 
{ 
InitializeComponent(); 
controller = new StudentController(this); 
principal = principalMenu; 
} 
16. Haga doble click en el botón Registrar Alumno, en el evento generado introduzca el 
siguiente código: 
controller.ShowRegisterStudent(); 
17. En el formulario de Registrar Alumno, en el botón registrar, haga doble click, ejecute el 
siguiente código: 
controller.RegisterStudent(this);
18. En el formulario creado por defecto en el proyecto, renómbrelo por PrincipalMenu, 
coloque controles, este se tiene que ver de la siguiente manera: 
19. Haga doble click en el botón Alumnos, introduzca el siguiente código: 
StudentMenu menu = new StudentMenu(this); 
menu.Show(); 
Hide(); 
20. Haga doble click en el botón Salir, introduzca el siguiente código: 
Application.Exit(); 
21. En el formulario StudentMenu, haga doble click en el botón Volver e introduzca el 
siguiente código: 
principal.Show(); 
Hide(); 
controller.Dispose(); 
Dispose(); 
22. Ejecute el programa 
23. Responda las siguientes preguntas: 
a. Que hace el controlador? 
b. Que hacen las vistas? 
c. Que ventajas ve usted al separar las responsabilidades en distintas clases? 
d. Que desventajas ve usted al separar las responsabilidades en distintas clases? 
e. Cual es el objetivo de crear métodos set/get en las vistas? 
f. Donde se muestran los errores reportados por todas las clases creadas? 
24. Pruebe el programa 
25. Intente completar el “modulo” de Alumnos, implementando el buscar, editar y 
eliminar. Las vistas ya están creadas, El modelo ya esta listo, complete el controlador y 
los eventos necesarios de las vistas. 
26. Intente implementar el “modulo” Materias.
Entrega 
La práctica debe ser entregada de la siguiente manera: 
El código completo de la practica, un archivo en Word con las respuestas de las preguntas de la 
practica, propiamente nombradas, en un archivo comprimido de la siguiente manera: 
PracticaV-(nombrecompleto).rar 
El archivo comprimido enviarlo al correo inf151ucb@gmail.com con el asunto PrácticaIX- 
(nombre completo). Entregar el trabajo hasta las 23:59 del día 4 de noviembre del año 2013. 
* Si se detecta copia, el trabajo será anulado para el que copió y el que hizo copiar. 
* Este trabajo será evaluado como parte de la evaluación continua

Más contenido relacionado

La actualidad más candente

C# conexión sql server2012-visualstudio2012-mantenimientos
C#   conexión sql server2012-visualstudio2012-mantenimientosC#   conexión sql server2012-visualstudio2012-mantenimientos
C# conexión sql server2012-visualstudio2012-mantenimientosJomar Burgos Palacios
 
Unidad 9. acceso a base de datos desde java
Unidad 9. acceso a base de datos desde javaUnidad 9. acceso a base de datos desde java
Unidad 9. acceso a base de datos desde javadevsco63
 
Introducción a Java Persistence API
Introducción a Java Persistence APIIntroducción a Java Persistence API
Introducción a Java Persistence APIJose Martinez
 
Manual poo-unidad-visual-basic
Manual poo-unidad-visual-basicManual poo-unidad-visual-basic
Manual poo-unidad-visual-basicRaul Hernandez
 
Ser vlet conectar con base de datos
Ser vlet conectar con base de datosSer vlet conectar con base de datos
Ser vlet conectar con base de datosDavid
 
Cesnavarra 2009-boletín 1
Cesnavarra 2009-boletín 1Cesnavarra 2009-boletín 1
Cesnavarra 2009-boletín 1Cein
 
Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Ronald Cuello
 
Toturial aplicacion base de datos jsp
Toturial aplicacion base de datos jspToturial aplicacion base de datos jsp
Toturial aplicacion base de datos jspGabriela Vazquez
 
CONEXION VISUAL STUDIO.NET - SQL SERVER
CONEXION VISUAL STUDIO.NET - SQL SERVERCONEXION VISUAL STUDIO.NET - SQL SERVER
CONEXION VISUAL STUDIO.NET - SQL SERVERDarwin Durand
 
Tutorial 1 android
Tutorial 1 androidTutorial 1 android
Tutorial 1 androidlibidinosa
 
Manual Netbeans Bases Datos2
Manual Netbeans Bases Datos2Manual Netbeans Bases Datos2
Manual Netbeans Bases Datos2mtemarialuisa
 
Taller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeansTaller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeansEmerson Garay
 
instalacion y conexion a base de datos postgrest /java
instalacion y conexion a base de datos postgrest /javainstalacion y conexion a base de datos postgrest /java
instalacion y conexion a base de datos postgrest /javaNey Rogger Miranda
 
Manual Swing-Java-PostgreSQL
Manual Swing-Java-PostgreSQLManual Swing-Java-PostgreSQL
Manual Swing-Java-PostgreSQLpablo
 

La actualidad más candente (19)

C# conexión sql server2012-visualstudio2012-mantenimientos
C#   conexión sql server2012-visualstudio2012-mantenimientosC#   conexión sql server2012-visualstudio2012-mantenimientos
C# conexión sql server2012-visualstudio2012-mantenimientos
 
Unidad 9. acceso a base de datos desde java
Unidad 9. acceso a base de datos desde javaUnidad 9. acceso a base de datos desde java
Unidad 9. acceso a base de datos desde java
 
Introducción a Java Persistence API
Introducción a Java Persistence APIIntroducción a Java Persistence API
Introducción a Java Persistence API
 
Manual poo-unidad-visual-basic
Manual poo-unidad-visual-basicManual poo-unidad-visual-basic
Manual poo-unidad-visual-basic
 
Ser vlet conectar con base de datos
Ser vlet conectar con base de datosSer vlet conectar con base de datos
Ser vlet conectar con base de datos
 
Cesnavarra 2009-boletín 1
Cesnavarra 2009-boletín 1Cesnavarra 2009-boletín 1
Cesnavarra 2009-boletín 1
 
Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)
 
Toturial aplicacion base de datos jsp
Toturial aplicacion base de datos jspToturial aplicacion base de datos jsp
Toturial aplicacion base de datos jsp
 
JPA en Netbeans
JPA en NetbeansJPA en Netbeans
JPA en Netbeans
 
CONEXION VISUAL STUDIO.NET - SQL SERVER
CONEXION VISUAL STUDIO.NET - SQL SERVERCONEXION VISUAL STUDIO.NET - SQL SERVER
CONEXION VISUAL STUDIO.NET - SQL SERVER
 
Tutorial 1 android
Tutorial 1 androidTutorial 1 android
Tutorial 1 android
 
Manual Netbeans Bases Datos2
Manual Netbeans Bases Datos2Manual Netbeans Bases Datos2
Manual Netbeans Bases Datos2
 
Taller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeansTaller: Prueba Unitaria con JUnit en NetBeans
Taller: Prueba Unitaria con JUnit en NetBeans
 
Guía herramientas de BD PHP
Guía herramientas de BD PHPGuía herramientas de BD PHP
Guía herramientas de BD PHP
 
instalacion y conexion a base de datos postgrest /java
instalacion y conexion a base de datos postgrest /javainstalacion y conexion a base de datos postgrest /java
instalacion y conexion a base de datos postgrest /java
 
Manual Swing-Java-PostgreSQL
Manual Swing-Java-PostgreSQLManual Swing-Java-PostgreSQL
Manual Swing-Java-PostgreSQL
 
Guia7 java
Guia7 javaGuia7 java
Guia7 java
 
Espacio de nombres System.Data.SQLClient
Espacio de nombres System.Data.SQLClientEspacio de nombres System.Data.SQLClient
Espacio de nombres System.Data.SQLClient
 
Hack x crack_sq_linjection
Hack x crack_sq_linjectionHack x crack_sq_linjection
Hack x crack_sq_linjection
 

Destacado

Curso SQL-C# Basico
Curso SQL-C# BasicoCurso SQL-C# Basico
Curso SQL-C# BasicoserTI_MX
 
Núcleo 3 - Normalización de Bases de datos
Núcleo 3 - Normalización de Bases de datosNúcleo 3 - Normalización de Bases de datos
Núcleo 3 - Normalización de Bases de datoscarsanta
 
Caso practico de base de datos orientada a objetos
Caso practico de base de datos orientada a objetosCaso practico de base de datos orientada a objetos
Caso practico de base de datos orientada a objetosMiguel Martinez
 
Visual 2010 sql server 2008
Visual 2010 sql server 2008Visual 2010 sql server 2008
Visual 2010 sql server 2008Alex Vasquez
 
introduccion al desarrollo de aplicaciones en c#
introduccion al desarrollo de aplicaciones en c#introduccion al desarrollo de aplicaciones en c#
introduccion al desarrollo de aplicaciones en c#Eduardo Carrillo
 
El dba(administracion de base de datos)
El dba(administracion de base de datos)El dba(administracion de base de datos)
El dba(administracion de base de datos)UTN
 
SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)Darwin Durand
 

Destacado (8)

Practica9 bases de datos
Practica9 bases de datosPractica9 bases de datos
Practica9 bases de datos
 
Curso SQL-C# Basico
Curso SQL-C# BasicoCurso SQL-C# Basico
Curso SQL-C# Basico
 
Núcleo 3 - Normalización de Bases de datos
Núcleo 3 - Normalización de Bases de datosNúcleo 3 - Normalización de Bases de datos
Núcleo 3 - Normalización de Bases de datos
 
Caso practico de base de datos orientada a objetos
Caso practico de base de datos orientada a objetosCaso practico de base de datos orientada a objetos
Caso practico de base de datos orientada a objetos
 
Visual 2010 sql server 2008
Visual 2010 sql server 2008Visual 2010 sql server 2008
Visual 2010 sql server 2008
 
introduccion al desarrollo de aplicaciones en c#
introduccion al desarrollo de aplicaciones en c#introduccion al desarrollo de aplicaciones en c#
introduccion al desarrollo de aplicaciones en c#
 
El dba(administracion de base de datos)
El dba(administracion de base de datos)El dba(administracion de base de datos)
El dba(administracion de base de datos)
 
SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)
 

Similar a Practica9 bases de datos

Tema 9 aplicaciones de dos capas por gio
Tema 9   aplicaciones de dos capas por gioTema 9   aplicaciones de dos capas por gio
Tema 9 aplicaciones de dos capas por gioRobert Wolf
 
Taller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataformaTaller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataformaLuis Beltran
 
Tema 15 aplicaciones de dos capas por gio
Tema 15   aplicaciones de dos capas por gioTema 15   aplicaciones de dos capas por gio
Tema 15 aplicaciones de dos capas por gioRobert Wolf
 
Instalación del conector de MySQL para Visual Studio
Instalación del conector de MySQL para Visual StudioInstalación del conector de MySQL para Visual Studio
Instalación del conector de MySQL para Visual StudioYoshuaZea
 
Ejercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxEjercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxssuser2e6b96
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datosJhiZzelh T Cz
 
la mejor forma de Conectar c# con mysql con archivos de configuracion
 la mejor forma de Conectar c# con mysql con archivos de configuracion  la mejor forma de Conectar c# con mysql con archivos de configuracion
la mejor forma de Conectar c# con mysql con archivos de configuracion juandavid1118
 
Dprn3 u3 a1_roog Actividad 1: Mysql.Data.MySqlClient
Dprn3 u3 a1_roog  Actividad 1: Mysql.Data.MySqlClientDprn3 u3 a1_roog  Actividad 1: Mysql.Data.MySqlClient
Dprn3 u3 a1_roog Actividad 1: Mysql.Data.MySqlClientrodrigo ornelas
 
Espacio de nombres system.data.sql client
Espacio de nombres system.data.sql clientEspacio de nombres system.data.sql client
Espacio de nombres system.data.sql clientLIZBETH LIZANA CARRASCO
 
Año del buen servicio al cuidadano
Año del buen servicio al cuidadanoAño del buen servicio al cuidadano
Año del buen servicio al cuidadanoSILVA19_PAMELA
 
Visual para principiantes
Visual para principiantesVisual para principiantes
Visual para principiantesAlberto Rojas
 

Similar a Practica9 bases de datos (20)

Tema 9 aplicaciones de dos capas por gio
Tema 9   aplicaciones de dos capas por gioTema 9   aplicaciones de dos capas por gio
Tema 9 aplicaciones de dos capas por gio
 
Taller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataformaTaller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataforma
 
Connection
ConnectionConnection
Connection
 
Tema 15 aplicaciones de dos capas por gio
Tema 15   aplicaciones de dos capas por gioTema 15   aplicaciones de dos capas por gio
Tema 15 aplicaciones de dos capas por gio
 
Dprn3 u3 a1_osfm
Dprn3 u3 a1_osfmDprn3 u3 a1_osfm
Dprn3 u3 a1_osfm
 
Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3
 
DAM-S7.pptx
DAM-S7.pptxDAM-S7.pptx
DAM-S7.pptx
 
Instalación del conector de MySQL para Visual Studio
Instalación del conector de MySQL para Visual StudioInstalación del conector de MySQL para Visual Studio
Instalación del conector de MySQL para Visual Studio
 
Ejercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxEjercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docx
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datos
 
Block
BlockBlock
Block
 
la mejor forma de Conectar c# con mysql con archivos de configuracion
 la mejor forma de Conectar c# con mysql con archivos de configuracion  la mejor forma de Conectar c# con mysql con archivos de configuracion
la mejor forma de Conectar c# con mysql con archivos de configuracion
 
Dprn3 u3 a1_eeul
Dprn3 u3 a1_eeulDprn3 u3 a1_eeul
Dprn3 u3 a1_eeul
 
Dprn3 u3 a1_roog Actividad 1: Mysql.Data.MySqlClient
Dprn3 u3 a1_roog  Actividad 1: Mysql.Data.MySqlClientDprn3 u3 a1_roog  Actividad 1: Mysql.Data.MySqlClient
Dprn3 u3 a1_roog Actividad 1: Mysql.Data.MySqlClient
 
Espacio de nombres system.data.sql client
Espacio de nombres system.data.sql clientEspacio de nombres system.data.sql client
Espacio de nombres system.data.sql client
 
Conexión de Base de Datos
Conexión de Base de DatosConexión de Base de Datos
Conexión de Base de Datos
 
Dprn3 u3 a1_rahv
Dprn3 u3 a1_rahvDprn3 u3 a1_rahv
Dprn3 u3 a1_rahv
 
My Sql A C#
My Sql A C#My Sql A C#
My Sql A C#
 
Año del buen servicio al cuidadano
Año del buen servicio al cuidadanoAño del buen servicio al cuidadano
Año del buen servicio al cuidadano
 
Visual para principiantes
Visual para principiantesVisual para principiantes
Visual para principiantes
 

Último

El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kVEl proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kVSebastianPaez47
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptxBRAYANJOSEPTSANJINEZ
 
presentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricopresentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricoalexcala5
 
nom-028-stps-2012-nom-028-stps-2012-.pdf
nom-028-stps-2012-nom-028-stps-2012-.pdfnom-028-stps-2012-nom-028-stps-2012-.pdf
nom-028-stps-2012-nom-028-stps-2012-.pdfDiegoMadrigal21
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAJOSLUISCALLATAENRIQU
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfKEVINYOICIAQUINOSORI
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILProblemSolved
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónXimenaFallaLecca1
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxEduardoSnchezHernnde5
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaAlexanderimanolLencr
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaXimenaFallaLecca1
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxbingoscarlet
 
UNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotencialesUNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotencialesElianaCceresTorrico
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxMarcelaArancibiaRojo
 
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASfranzEmersonMAMANIOC
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdfFernandaGarca788912
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.pptoscarvielma45
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxJuanPablo452634
 

Último (20)

El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kVEl proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
 
presentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctricopresentacion medidas de seguridad riesgo eléctrico
presentacion medidas de seguridad riesgo eléctrico
 
nom-028-stps-2012-nom-028-stps-2012-.pdf
nom-028-stps-2012-nom-028-stps-2012-.pdfnom-028-stps-2012-nom-028-stps-2012-.pdf
nom-028-stps-2012-nom-028-stps-2012-.pdf
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdf
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcción
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptx
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdfVALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
 
CLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptxCLASe número 4 fotogrametria Y PARALAJE.pptx
CLASe número 4 fotogrametria Y PARALAJE.pptx
 
UNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotencialesUNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotenciales
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docx
 
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdf
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
 

Practica9 bases de datos

  • 1. Conexión a la base de datos desde Visual Studio y la arquitectura Modelo Vista Controlador (MVC) En esta práctica, estudiaremos como realizar la conexión a la base de datos desde una aplicación en C#. Después usando lo aprendido, crearemos una pequeña aplicación que interactúe con la base de datos usando un patrón arquitectónico llamado Modelo Vista Controlador. Antes de todo: Primeramente, debemos tener una base de datos donde trabajar. Para esto, inicie el SQL Managment Studio. Abra el script proporcionado, y ejecútelo, al final debería tener una base de datos equivalente a esta:
  • 2. Conexión a la base de datos desde C# Ahora intentaremos realizar la conexión desde una aplicación en C# a la base de datos, para esto, usaremos una tecnología de la plataforma .NET, llamada ADO.NET, que significa ActiveX Data Object, para usar la tecnología y conectarse a la base de datos realice los siguientes pasos: 1. Ingrese a Visual Studio 2. Cree un proyecto en Consola para C# 3. Dentro del método Main introduzca el siguiente código: static void Main(string[] args) { string connectionString = "server=.SQLEXPRESS;" + 4. Antes de ejecutar el código, observe la cadena de conexión. La cadena de conexión es un equivalente a la URL. En esta cadena uno debe indicar donde esta el servidor de la base de datos, y el nombre de la base de datos a acceder. Dependiendo como es la instalación de su servidor, la cadena de conexión puede variar. En el campo “server”, puede venir los siguientes ejemplos a. .SLQEXPRESS "integrated security=SSPI;" + "database=Universidad"; string sql = "SELECT TOP 10 nombre, apellido FROM Alumno"; SqlConnection conn = new SqlConnection(connectionString); conn.Open(); SqlCommand command = new SqlCommand(sql, conn); SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { Console.WriteLine("{0}tt{1}", reader[0], reader[1]); } conn.Close(); }
  • 3. b. .MSSQLSERVER c. Nompre-PCSQLEXPRESS d. .NombreInstancia 5. En el campo database debe estar el nombre de la base de datos a acceder. 6. Edite la cadena de conexión dependiendo como se acopla a su caso. 7. Ejecute el programa. Responda las siguientes preguntas 1. Que hace el programa? 2. Que cree que hace el objeto SqlConnection? 3. Que cree que hace el objeto SqlCommand? 4. Que cree que hace el objeto SqlDataReader? Arquitectura Modelo Vista Controlador En el desarrollo de software existen los patrones arquitectónicos, modelos de diseño de software que permiten organizar mejor las clases y objetos de tal manera de crear programas con un buen diseño orientado a objetos. Uno de estos patrones se denomina el patrón Modelo Vista Controlador (MVC). Este patrón es usado bastante en el mundo del desarrollo de software. Muchos frameworks en varios lenguajes fueron desarrollados siguiendo esta arquitectura. Ejemplos de esto son: · ASP.NET MVC · Ruby on Rails · Java Server Faces La idea de esta arquitectura, es separar las responsabilidades de las clases y dividirlos en capas. Existe un objeto llamado el modelo. Que se ocupa de mantener la lógica de validación y que los objetos en el programa se mantengan en un estado consciente. Como parte del modelo, existe el manejo de los datos. Y como guardarlos por ejemplo en una base de datos, o en un archivo, dependiendo los requerimientos del sistema. Después del modelo. Tenemos las vistas. Estos objetos pertenecientes a la vista se ocupan de mostrar los datos de alguna manera al usuario. La idea de la arquitectura Modelo Vista Controlador es que fácilmente podamos cambiar las vistas. Por ejemplo de tener una vista que esta en Windows Forms, a una vista manejado como sistema web en ASP.NET o en consola. Al final existe una clase, llamada Controlador, que es la que se encarga de comunicar a la Vista con el Modelo. Este se encarga de mandar mensajes al modelo para que se actualice y los resultados mandarlos a la Vista, para que el usuario puede ver los resultados. En esa clase, se mostrara una implementación básica de la arquitectura Modelo Vista Controlador. Empecemos a implementar. Antes de todo, se supone que dentro de su servidor SQLServer ya ejecuto el script proporcionado y tiene una base de datos llamada Universidad.
  • 4. 1. Cree un proyecto de Windows Forms 2. Dentro de este proyecto cree las siguientes carpetas a. Model b. View c. Controller d. Database 3. Dentro de la carpeta Model cree una clase llamada Student, y una clase llamada ModelException 4. En la clase ModelException introduzca el siguiente código: public class ModelException : Exception { public ModelException(string msg) : base(msg) {} }
  • 5. 5. En la clase Student introduzca el siguiente código: public class Student { private int ci; private string firstName; private string lastName; private DateTime birthday; private int cellphone; public Student() { ci = 0; firstName = ""; lastName = ""; birthday = DateTime.Now; cellphone = 71234567; } public int CI { get { return ci; } set { if (value < 100000) throw new ModelException("El CI no es válido"); ci = value; } } public string FirstName { get { return firstName; } set {
  • 6. if (String.IsNullOrEmpty(value)) throw new ModelException("El nombre no puede estar vacio"); if (value.Length > 30) throw new ModelException("El nombre no puede tener mas de 30 carácteres"); firstName = value; } } public string LastName { get { return lastName; } set { if (String.IsNullOrEmpty(value)) throw new ModelException("El apellido no puede estar vacio"); if (value.Length > 30) throw new ModelException("El apellido no puede tener mas de 30 carácteres"); lastName = value; } } public DateTime Birthday { get { return birthday; } set { if (value > DateTime.Now) throw new ModelException("La fecha de nacimiento aun no pasó!!"); birthday = value; } } public int CellPhone { get { return cellphone; } set { if (value < 60000000 || value > 80000000) throw new ModelException("Celular no valido"); cellphone = value; } } }
  • 7. 6. Antes de seguir. Revise y estudie el código y responda las siguientes preguntas: a. Que representa la clase Student? b. Que se hace en las funciones set/get de la clase? c. Como se reporta errores en el modelo? 7. Dentro de la carpeta cree una clase llamada ConnectionManager. La responsabilidad de esta clase será la encargada de mantener la cadena de conexión, Conectarse a la base de datos y dar una manera de ejecutar comandos SQL a las otras clases. La clase es como sigue: public class ConnectionManager : IDisposable { private string connectionString = "server=.SQLEXPRESS;" + 8. Antes de continuar, responda, los objetos usados en esta clase le parecen familiar? 9. Cree una clase DatabaseException. El código de la clase sigue asi: public class DatabaseException : Exception { public DatabaseException(string message) : base(message) { } } 10. Cree una clase dentro de la carpeta Database llamada StudentsDatabase, el código de la clase es como sigue: "integrated security=SSPI;" + "database=Universidad"; private SqlConnection connection; public ConnectionManager() { connection = new SqlConnection(connectionString); connection.Open(); } public SqlCommand GetCommand(string sql) { return new SqlCommand(sql, connection); } public void Dispose() { connection.Close(); connection.Dispose(); }
  • 8. public class StudentsDatabase : IDisposable { private ConnectionManager connection; public StudentsDatabase() { connection = new ConnectionManager(); } public Student GetUserByCI(int CI) { try { String sql = "SELECT * FROM Alumno WHERE CI = @CI"; SqlCommand command = connection.GetCommand(sql); command.Parameters.AddWithValue("@CI", CI); SqlDataReader reader = command.ExecuteReader(); if (reader.HasRows) { reader.Read(); Student student = new Student { CI = Convert.ToInt32(reader[0]), FirstName = Convert.ToString(reader[1]), LastName = Convert.ToString(reader[2]), Birthday = Convert.ToDateTime(reader[3]), CellPhone = Convert.ToInt32(reader[4]) }; reader.Close(); return student; } reader.Close(); } catch (Exception exception) { throw new DatabaseException("Error en la base de datos: " + exception.Message); } return null; } public void CreateNewStudent(Student student) { try { String sql = "INSERT INTO Alumno (CI, nombre, apellido, fechanac, celular) " + "VALUES (@CI, @firstname, @lastname, @birthday, @cellphone)"; SqlCommand command = connection.GetCommand(sql); command.Parameters.AddWithValue("@CI", student.CI); command.Parameters.AddWithValue("@firstname", student.FirstName); command.Parameters.AddWithValue("@lastname", student.LastName); command.Parameters.AddWithValue("@birthday", student.Birthday); command.Parameters.AddWithValue("@cellphone", student.CellPhone);
  • 9. int rows = command.ExecuteNonQuery(); if (rows == 0) throw new DatabaseException("Error en la base de datos"); } catch (Exception exception) { throw new DatabaseException("Error en la base de datos: " + exception.Message); } } public void UpdateStudent(Student student) { try { String sql = "UPDATE Alumno SET" + "nombre = @firstname, " + "apellido = @lastname, " + "fechanac = @fechanac, " + "celular = @cellphone " + "WHERE CI = @CI"; SqlCommand command = connection.GetCommand(sql); command.Parameters.AddWithValue("@CI", student.CI); command.Parameters.AddWithValue("@firstname", student.FirstName); command.Parameters.AddWithValue("@lastname", student.LastName); command.Parameters.AddWithValue("@birthday", student.Birthday); command.Parameters.AddWithValue("@cellphone", student.CellPhone); int rows = command.ExecuteNonQuery(); if (rows == 0) throw new DatabaseException("Error en la base de datos"); } catch (Exception exception) { throw new DatabaseException("Error en la base de datos: " + exception.Message); } } public void DeleteStudentByCI(int CI) { try { String sql = "DELETE FROM Alumno " + "WHERE CI = @CI"; SqlCommand command = connection.GetCommand(sql); command.Parameters.AddWithValue("@CI", CI); int rows = command.ExecuteNonQuery(); if (rows == 0) throw new DatabaseException("Error en la base de datos"); } catch (Exception exception) { throw new DatabaseException("Error en la base de datos: " + exception.Message); } }
  • 10. public List<Student> GetAllStudents() { List<Student> students = new List<Student>(); try { String sql = "SELECT * FROM Alumno"; SqlCommand command = connection.GetCommand(sql); SqlDataReader reader = command.ExecuteReader(); while(reader.Read()) { 11. Deténgase en esta clase, analice el código y responda las siguientes preguntas: a. Que responsabilidades tiene esta clase? b. Que hace cada método de la clase? c. Como se ejecutan las sentencias SQL? d. Como se reportan errores de la base de datos al programa? e. Como se busca un objeto en la base de datos? f. Como se inserta un nuevo objeto en la base de datos? g. Como se elimina un objeto en la base de datos? h. Como se edita un objeto en la base de datos? i. Investigue un poco mas acerca de las sentencias SQL preparadas. Que ventajas tiene usar este tipo de sentencias? Ve alguna sentencia SQL Preparada en esta clase? 12. En la carpeta View cree una carpeta llamada Student, dentro de este cree los siguientes formularios: Student student = new Student { CI = Convert.ToInt32(reader[0]), FirstName = Convert.ToString(reader[1]), LastName = Convert.ToString(reader[2]), Birthday = Convert.ToDateTime(reader[3]), CellPhone = Convert.ToInt32(reader[4]) }; students.Add(student); } } catch (Exception exception) { throw new DatabaseException("Error en la base de datos: " + exception.Message); } return students; } public void Dispose() { connection.Dispose(); } }
  • 11. a. StudentMenu: b. RegisterStudentForm
  • 12. c. ShowStudentForm d. EditStudentForm 13. En los formularios de, Editar Alumno, Buscar Alumno y Registrar Alumno cree los siguientes métodos (Cambie el nombre de los objetos dependiendo como usted llamo a sus controles al crear los formularios):
  • 13. public (Nombre_Constructor)(StudentController theController) { InitializeComponent(); controller = theController; } public String CI { get { return ciTextBox.Text; } set { ciTextBox.Text = value; } } public String FirstName { get { return firstNameTextBox.Text; } set { firstNameTextBox.Text = value; } } public String LastName { get { return lastNameTextBox.Text; } set { lastNameTextBox.Text = value; } } public String BirthDay { get { return birthdayDate.Text; } set { birthdayDate.Text = value; } }
  • 14. public String Cellphone 14. Cree una clase dentro de la carpeta Controller una clase llamada StudentController, el código de la clase es como sigue: public class StudentController : IDisposable { private StudentMenu studentMenu; private StudentsDatabase model; public StudentController(StudentMenu menu) { studentMenu = menu; model = new StudentsDatabase(); } public void ShowRegisterStudent() { studentMenu.Hide(); RegisterStudentForm register = new RegisterStudentForm(this); register.Show(); } public void RegisterStudent(RegisterStudentForm registerForm) { try { Student student = new Student(); student.CI = Convert.ToInt32(registerForm.CI); student.FirstName = registerForm.FirstName; student.LastName = registerForm.LastName; student.Birthday = Convert.ToDateTime(registerForm.BirthDay); student.CellPhone = Convert.ToInt32(registerForm.Cellphone); if (model.GetUserByCI(student.CI) != null) { throw new Exception("El Estudiante ya ha sido registrado"); } { get { return cellphoneTextBox.Text; } set { cellphoneTextBox.Text = value; } } public void ShowError(String message) { MessageBox.Show(message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }
  • 15. model.CreateNewStudent(student); registerForm.Hide(); registerForm.Dispose(); studentMenu.Show(); } catch (Exception ex) { registerForm.ShowError(ex.Message); } } public void Dispose() { model.Dispose(); } } 15. Dentro del formulario StudentMenu, edite el código e introduzca el siguiente código: private StudentController controller; private PrincipalMenu principal; public StudentMenu(PrincipalMenu principalMenu) { InitializeComponent(); controller = new StudentController(this); principal = principalMenu; } 16. Haga doble click en el botón Registrar Alumno, en el evento generado introduzca el siguiente código: controller.ShowRegisterStudent(); 17. En el formulario de Registrar Alumno, en el botón registrar, haga doble click, ejecute el siguiente código: controller.RegisterStudent(this);
  • 16. 18. En el formulario creado por defecto en el proyecto, renómbrelo por PrincipalMenu, coloque controles, este se tiene que ver de la siguiente manera: 19. Haga doble click en el botón Alumnos, introduzca el siguiente código: StudentMenu menu = new StudentMenu(this); menu.Show(); Hide(); 20. Haga doble click en el botón Salir, introduzca el siguiente código: Application.Exit(); 21. En el formulario StudentMenu, haga doble click en el botón Volver e introduzca el siguiente código: principal.Show(); Hide(); controller.Dispose(); Dispose(); 22. Ejecute el programa 23. Responda las siguientes preguntas: a. Que hace el controlador? b. Que hacen las vistas? c. Que ventajas ve usted al separar las responsabilidades en distintas clases? d. Que desventajas ve usted al separar las responsabilidades en distintas clases? e. Cual es el objetivo de crear métodos set/get en las vistas? f. Donde se muestran los errores reportados por todas las clases creadas? 24. Pruebe el programa 25. Intente completar el “modulo” de Alumnos, implementando el buscar, editar y eliminar. Las vistas ya están creadas, El modelo ya esta listo, complete el controlador y los eventos necesarios de las vistas. 26. Intente implementar el “modulo” Materias.
  • 17. Entrega La práctica debe ser entregada de la siguiente manera: El código completo de la practica, un archivo en Word con las respuestas de las preguntas de la practica, propiamente nombradas, en un archivo comprimido de la siguiente manera: PracticaV-(nombrecompleto).rar El archivo comprimido enviarlo al correo inf151ucb@gmail.com con el asunto PrácticaIX- (nombre completo). Entregar el trabajo hasta las 23:59 del día 4 de noviembre del año 2013. * Si se detecta copia, el trabajo será anulado para el que copió y el que hizo copiar. * Este trabajo será evaluado como parte de la evaluación continua