Enlazar Base de Datos .mdf Visual Studio 2012

Enlazar Base de Datos (.mdf) SQL Server con Visual Studio 2012
Parte 3

Ultima parte de este pequeño tutorial, habiamos creado desde cero una base de datos .mdf, luego configuramos nuestro DataSet y ahora vamos a darle vida a nuestra aplicacion.
Vamos a hacerlos con controles basicos de Visual Studio 2012. Pero otro dia podriamos hacerlo con botones con efectos Hover, ListView Transparentes, para que quede mas lindo.

Crear la aplicacion para Altas, Bajas y Modificaciones

Vamos a nuestro formulario:



Ahora agregaremos una ventana al Visual Studio llamada Origenes de Datos:

Veremos que nos aparecio esto:



Vamos a arrastrar los controles y van a pasar muchas cosas. Tiene que quedar algo asi:



Visual Studio nos creo muchos objetos, algunos que ni vamos a utilizar. Fijate que si lo guardas y lo compilas ya lo podes utilizar:



Tienes que colocar un IdCliente para que te funcione.
En C# de Visual Studio todos es orientado a objetos, hasta el primer formulario es un objeto. Que significa? que exite una clase para este tipo de Formulario.
Vamos a verificarlo. Primero renombraremos la clase:



Luego vamos a entrar al Main si hacemos doble click en Program.cs:

El main es el primer codigo que se ejecuta. Vamos a agregar 2 lineas de codigo y modificar una:



En la de arriba declaramos una variable del tipo frmClientesEditar con el nombre ObjFormularioClientes.En la otra linea creamos una instancia de la clase frmClientesEditar, por lo tanto esa variable sera un objeto ahora.
Luego llamamos al metodo Run de Application, y si le pasamos como parametro un Objeto del Tipo Form, me lo va a mostrar. Compilalo y tiene que funcionar igual.



Todos estos son Objetos, algunos visibles, pero otros no. pero ahora Donde se declaran estos objetos? y Donde los estamos inicializando? Visual Studio realiza el trabajo por nosotros pero igual vamos a observar donde estan los pequeños bastardos...



Si hacemos doble click en frmClientesEditar.Designer.cs vermos que ahi estan declarados los pequeños bastardos, hasta los TextBox están. pero donde se inician?



Si hacemos doble click en frmClientesEditar veremos que en donde te señalo ahi un constructor. Este se ejecuta cuando llamamos a un new. Fijate que esta llamando a su mismo metodo llamado InitializeComponent(). vamos a verlo...



Si volvemos al frmClientesEditar.Designer.cs y revisamos bien, veremos que ahi se estan iniciando los pequeños bastardos.
Ahora vamos a eliminar todos los controles (Objetos, Intenacias de Clases, pequeños bastardos o como le quieras llamar) que tenemos de mas. no tiene que quedar algo asi:




Bueno, el siguiente esquema explica como funciona todo esto:



Las lineas no tiene flechas porque son bidireccionales (leen o escriben). El clientesMostrarBindingSource interactua con nuestros controles, luego se los comunica al dB_DataSet, pero a una DateTable de nuestro DataSet, en este caso al dB_DataSet.ClientesMostrar. Luego ClientesMostrarTableAdapter hace uso del metodo correspondiente(procedimientos almasenados) y realiza los cambios en nuestra base de datos DB_File.mdf.
Ahora vamos a escribir codigo. Haremos que se ejecute el ClietesMostrar(idCliente) al cargar el formulario



En el evento Load del formulario llamaremos al evento Llenar del clientesMostrarTableAdapter le pasaremos 2 parametros, el primero es donde voy a volvar esos datos, en este caso el db_DataSet.ClientesMostrar que es un DataTable y luego le pasamos el IdCliente. Podes probar con 1, 2 y 3, otro numero no porque solo tenemos cargados 3 registros, la idea despues es que este IdCliente venga del formulario de lista, lo veremos despues. Compilalo y pruebalo



Que es ese boton que aparecio? pues me adelante a los hechos. Crea este boton, nombralo btnAceptar, doble click en él y escribele el siguiente codigo:



Este boton Aceptar lo que tiene que hacer es guardar los cambios y realizar la Actualizacion

El método Validate() lo que hace es quitar el foco en donde este, imaginate que estamos editando un TextBox y le mandomos Aceptar, nuesto programa no va saber que hacer con el TextBox que estabas editando? en realidad no hace nada, pero lo que deberia hacer es guardar los cambios que hiciste hasta el momento en el TextBox y luego hacer la actualizacion.

Luego en clientesMostrarBindingSource.EndEdit() que esto?
Te explico, si te acuerdas en el esquema el clientesMostrarBindingSource se encarga de interacturar con nuestros pequeños bastardos (controles). Cuando nosotros editamos un TextBox que esta relacionado con este BlindingSource, entra automaticamente a modo edicion, es muy inteligente este pequeño bastardon. Luego tenemos que avisarle que temine esa edicion con el metodo EndEdit() y lo que hara es hacer los cambios en ClientesMostrar del dB_DataSet. para que nuestra 3ra linea y ultima linea de codigo el clienteMostrarTableAdapter llame al metoto Update con el parametro db_DataSet.ClientesMostrar. pero y los parametros de nuestro MostrarModificar (procedimientoalmasenado) ?

Exelente pregunta, bueno resulta que el TableAdapter tambien es bastante inteligente. Verifica que estan los parametros dentro del dataTable (db_DataSet.ClientesMostrar) el sabe que tiene que hacer una actualizacion, entonces la realiza. Imaginate si en ves de ser 3 campos de texto son 25 campos de textos y tienes que por codigo pasar uno por uno? el TableAdapter hace todo el trabajo sucio por vos. Y tambien lo hara para el Insert. genial no?
Ok vamos a probarlos.

Cambiaremos el ThexBox que dice Felix con Felix The Cat


Aceptamos y luego cerramos. Lo volvemos a ejecutar y mal, no funciona, sigue Felix solo. Estaras diciendo ChamHerz me estas vendiendo mazanas por peras...
Pero no, siempre existe una explicacion para todo. El programa esta funcionando correctamente, solo que no lo vemos. Te explicare...
Cuando le damos play al Visual Studio estamos en Debug, lo que hace internamente y no lo vemos es:
1) Compila
2) Copia todo el programa (incluso la base de datos) a la capeta debug
3) Ejecuta la aplicacio.
Entonces nosotros hicimos el Update, pero cuando volvemos a darle play, se vuelve a copiar la Base de datos original en el paso 2 y pierde todos los cambios.

Vamos a ir a esta carpeta Debug:
Esta se encuentra dentro de Bin ubicada en nuestra carpeta del proyecto:



Ejecuta el Portable.exe y realiza todos los cambios que quieres. cierralos, reinicia la maquina si queres, tus cambios van a mantenerse. Si compilas de nuevo con play en Visual Studio se perdera todo.

Ahora te invito a que intentes colocar algun texto en el campo Altura?
No puedes, no te deja, intentas aceptar, o salir del programa y no te permite irte del campo que editas. Eso porque estas intentanto romper mi programa...
Este método es inteligente, valida todos los campos antes de modificarlos, ahora son 3, pero podrian ser 50 campos, codigo que no ahorramos de tipear.
Sin embargo si coloco una altura negativa me la va a tomar. pero no existe, cometi este error a proposito en la primera parte de este tutorial, al colocar el tipo de dato INT a la altura, un tipo de dato que no le va.
Un tipo de dato INT en SQL Server 2012 puede almacenar el rango de valores desde -2^31 a 2^31-1 valores. es decir de -2.147.483.648 a
2147483647. Intentalo, experimentalo. Ve de nuevo a la carpeta debug, ejeguta tu programa y colocale una altura de 2.147.483.647



Guardalo. Sal y vuelve a entrar, la altura se guardo bien. Ahora intenta sumar uno a ese valos: ponle
2.147.483.648. Ya se, no te deja, actua como si fuera un error al escribir texto, en realidad internamente son diferentes tipos de errores, uno es carateres invalidos y el otro es overflow (fuera de rango) depues veremos como capturar estos errores.

El dato altura tendria q haber sido Tinyint que me acepta de 0 a 255, si es que colocamos la altura en mm y no tenemos un cliente que mida 3 metros:
Esto lo tendriamos que haber puesto cuando estabamos creando la tabla:



Es tarde, no intentes cambiarlo porque causaras errores, se puede pero sera complicado explicarlos. Sigamos analisando... el IdCliente nunca seran negativos, y vos crees que llegaremos a tener
2.147.483.648 Clientes? ni Lady Gaga tiene esa cantidad de seguidores en twitter. Un tipo de dato que le vendria bien es: SmallInt va desde -32768 a 32767, si fuera My SQL podriamos definir UNSIGNED y tendriamos desde 0 a 65536 pero SQL Server no nos permite esta ventaja. Igual 32767 es un numero muy grande para Cantidad de clientes no crees?

El campo IdCliente en realidad nunca se coloca en el formulario porque es no editable o si se coloca deberiamos bloquear este textbox, lo dejaremos visible a modo educativo por ahora. La fecha de alta no la incluimos en la acutualizacion, es un dato que se guarda solo en el insert y permanece para siempre asi, lo hace todo el Sistema, lo entenderas mejor ahora que crearemos el Alta de cliente.

Seguira en una 3ra parte bis el tutorial, no pense que era largo...





Enlazar Base de Datos .mdf Visual Studio 2012
20 Puntos Score: 10/10
Visitas: 1962 Favoritos: 3
Ver los usuarios que votaron...
4 Comentarios Enlazar Base de Datos .mdf Visual Studio 2012
Excelente aporte, en cuanto pueda lo probare.
gracias por tu tiempo.
Hola amigo, recien veo este pos, esta muy bueno, lo podrias actualizar, no se ven las imagenes, seria muy bueno, si lo pasas a pdf, muchas gracias  
@iphones Si.. los tendria que pasar a Pdf. en estos momentos estoy haciendo cursos acelerados de Windows Server 2012... en 2 semanas de desocupo
Para dejar un comentario Registrate! o.. eres ya usuario? Accede!