la mejor forma de Conectar c# con mysql con archivos de configuracion
1. CONEXION DE VISUAL C#.NET 2008 Y MYSQL WORKBENCH 6.1, A TRAVES DE CLASES Y ARCHIVOS
DE CONFIGURACION(APPCONFIG)PARAREALIZAR OPERACIONES DE INSERCION,MODIFICACION,
ELIMINACION Y BUSQUEDA
JUAN DAVID REDONDO ROBLES
ESTUDIANTE VII SEMESTRES ING DE SISTEMAS
UNIVERSIDAD DE LA GUAJIRA
COLOMBIA
RIOHACHA LA GUAJIRA
2015
2. INTRODUCCION
A travésde este escrito se pretende compartirconocimientosa través de la explicación de código
para conectar VISUAL C#.NET 2008 Y MYSQL WORKBENCH 6.1, a través de archivos de
configuración (APPCONFIG), para luego realizar operaciones de inserción, modificación,
eliminacióny búsquedadesdeun formulario. Esto se hará con la utilización de algunos principios
de la programación orientada a objetos (clases y objetos respectivamente), a lo largo del
documento se mostrara a través de capturas de pantalla con cada uno de los pasos a realizar.
Actualmente existen nuevas versiones de visual estudio tal como lo es la versión 2010,2012 y
2013, sin embargo, el código a proporcionar es aplicable a cualquiera de ellas sin tener ningún
problema.
Que se necesita:
Visual studio.net en cualquiera de sus versiones (yo trabajaré con la versión 2008)
Motor de bases de datos MySQL Workbench 6.1 o cualquier versión.
Procedimientos a realizar:
1. Crear una base de datos sencilla(1 tabla y cuatro campos y cinco registros)
2. Crear un procedimiento almacenado para insertar,editar ,eliminar y buscar
3. Agregar en Visual Studio el archivo de configuración appconfig y modificarlo.
4. Crear clases en visual c# .net para insertar, eliminar, y buscar.
5. Mostrar a través de un datagridview, todos los registos que están en la base de datos.
Nota: Utiliza los mismos nombres que están en el ejemplo así no tendrás
problemas, partiendo del hecho de que todo está relacionado.
3. CREACION DE LA BASE DE DATOS
Paso 1: Abrimos Mysql Workbench 6.1
Una vez que se abra al programa,se ingresacontu usuarioy contraseña,hechoesto el espacio de
trabajo quedara como el siguiente
4. Paso 2: En el área de consultasescribe el siguientecódigo:
createdatabase bdbiblioteca;
use bdbiblioteca;
createtable usuarios
(
Id char(20),
Nombre char(50),
Apellidochar(50),
primarykey (Id)
);
Luegoclic enel símbolo ,quedaraasí:
6. Paso 4 Procedimiento almacenado para insertar usuarios.
Copiay pega el siguiente código.
DELIMITER $$
CREATE PROCEDURE InsertarUsuario(PId char(20),PNombrechar(50),PApellido char(50))
BEGIN
insertinto usuarios(Id,Nombre,Apellido)
values (PId,PNombre ,PApellido);
END
Nota: enla imagenenla líneanumero17 aparece PI, peroes PId,por que así se llamael
parámetro.
7. Al final debe quedaralgoasí:
PASO 5: Verificarque el procedimientoalmacenadofunciona, correctamenteejecutael siguiente
códigoenuna consultaclicen y pegael siguiente código
CALL InsertarUsuario('12345','MI NOMBRE','MI APELLIDO');
SELECT * FROM USUARIOS;
La primeralíneallamaal procedimientoalmacenadoInsertarUsuario atravésde la palabra CALL, y
se le envían los parámetros a insertar en la bd, como estos son tipo char (carácter) se escriben
dentro de comillas simples, estos son los valores que se insertaran en la bd.
Una vez que escribas los comandos de la consulta presiona el icono , para que se ejecuten
todosloscomandoslíneaa línea, esdecirprimeroinsertaatravésdel procedimiento almacenado
los valores que se envían por parámetros y luego los muestra través del SELECT.
Nota: Tambiénse puede ejecutarunaconsultasituándose al final de la misma y presionanar CTL+
ENTER, la diferencia radica en que solo se ejecuta la línea en donde este el cursor, mientras que
con se ejecutan todas.
9. PASO 6 Procedimiento almacenado para editar usuarios.
Repite el paso 3 para crear otro procedimiento almacenado y pega el siguiente código
DELIMITER $$
CREATE PROCEDURE `EditarUsuario` (PId char(20),PNombre char(50),PApellido char(50))
BEGIN
update Usuarios set Nombre= PNombre,Apellido=PApellido where Id= PID;
END
10. PASO 7: Probarel procedimientoalmacenado,paraesto pegaenel área de consultalosiguiente y
clicen el icono
call EdItarUsuario('12345','JUAN DAVID','REDONDOROBLES');
SELECT * FROMusuarios;
Esta sentenciacambiael nombre anterior “MINOMBRE” PORJUAN DAVID y “MIAPELLIDO “por
REDONDOROBLES quedandoasí:
11. PASO 8 PROCEDIMIENTO ALMACENADO PARA ELIMINAR REGISTROS
Repite el paso 3 para crear un nuevo procedimiento almacenado y pega lo siguiente:
DELIMITER $$
CREATE PROCEDURE `EliminarUsuario` (PID char(20))
BEGIN
delete from usuarios where ID = PID;
END
Luego clic en apply
12. Debería verse así:
PASO 9: VERIFICARQUE EL PROCEDIMIENTO FUNCIONA
Comosolose tiene unregistroypara que no quede vacíaa tabla,insertacuatroregistros más
usandoel procedimientoalmacenadoInsertarUsuario,estoenel áreade consultasasi:
call InsertarUsuario('1010','JOHANA','PALMA');
call InsertarUsuario('1011','CLARA INES','GOMEZ');
call InsertarUsuario('1012','RICARDOANTONIO','RODRIGUEZ');
call InsertarUsuario('1013','MERIA PAOLA','ZULUAGA');
select* fromusuarios;
Luegoclic enicono para ejecutarloscomandos.
14. PASO 10: Procedimiento almacenado para buscar un usuario por su nombre
Crear unnuevoprocedimientoalmacenado(apoyarsedel paso3) copiay pegael siguiente código:
DELIMITER $$
CREATE PROCEDURE `BuscarUsuario` (NombreABuscar char(50))
BEGIN
select * from usuarios where Nombre like NombreABuscar;
END
Despuésque se hallaescritoel código,clicen apply,nuevamenteapply ypor ultimo finish.
Para probar si el procedimiento creadofuncionacorrectamente ejecutael siguiente códigoenuna
consultaclicen y pegael siguiente código
call BuscarUsuario('johana');
Por ultimoejecutalasentenciaconclicenel icono , el resultadoseráel siguiente:
Enhorabuenayaestá listalabase de datos, que esmuysencillaperoesa modode ejemplo, ahora
hay que darle funcionalidadatravésde visual studio,paraellosigue lospasosunoauno.
15. FUNCIONALIDAD DESDE VISUAL C # 2008
A continuación se muestran todos los pasos a realizar para luego desarrollarlos a
profundidad más adelante con ayuda de capturas de pantalla.
1) Crear un proyecto de visual C# con visual Studio
2) Agregar un archivo de configuración, el cual administrara la cadena de conexión de la
base de datos, existen dosformasde agregareste archivo,tambiénse explicara cuál es su
importancia en un proyecto de software con vs.
3) Agregar las referencias necesarias para trabajar con MYSQL y el archivo appconfig.
4) Crear unacarpeta enla cual se van a guardar todas lasclasesde nombre MisClases.
5) Crear una clase de Nombre Cadena.cs la cual se comunicara con el archivo app config y
obtener la cadena de conexión.
6) Insertarenel formulariotodosloselementosnecesarios para insertar, editar, 4eliminar y
buscar.
7) clase de nombre Mostrar.cs, para agregar la función de mostrar el usuario desde el
formulario.
8) clase de nombre Buscar.cs, para agregar la función de Buscar un usuario desde el
formulario.
9) clase de nombre Insertar.cs, para agregar la función de agregar un usuario desde el
formulario.
10) clase de nombre Editar.cs, para agregar la función de Editar un usuario desde el
formulario.
11) clase de nombre Eliminar.cs, para agregar la función de Eliminar un usuario desde el
formulario.
12) Prueba y ejecución.
16. 1) CREAR UN PROYECTO DE VISUAL C# CON VISUAL STUDIO
1.1 Abrimos visual studio
17. 1.2 Creamos un nuevo proyecto
1.3 Escogemos el lenguaje visual c#, la opcion de windows form y por ultimo
le cambiamos el nombre de cómo se quiere llamar al proyecto(los tres
pasos estan resaltados) por ultimo clic en aceptar.
19. 2) AGREGAR UN ARCHIVO DE CONFIGURACIÓN
Un archivo de configuración es aquel que proporcionara La cadena de conexión, en la que se
especificasistemamanejadorde base de datos ( Mysql eneste caso ),la base de datos a utilizar,el
servidor y la contraseña de acceso para la misma asi :
MySqlConnection conn = new MySqlConnection("server=127.0.0.1;
database=biblioteca; Uid=root; pwd=123456;");
Las palabrasresaltadassonlas que puedensercambiadas,eneste casolabase de datos se llama
bibliotecay lacontraseñaes 123456 losdemásvaloresquedanigual.
2.1 Explicaciónde la importancia de un archivo de configuración
Tomado de parvulos.net
Imagine, que hoy desarrolla un sistema con 20 Formularios, la cual va a instalar en 50 Pc’s que
utilizaran para la administración de su empresa, su conocimiento sobre las ventajas de usar un
archivo de configuración es nula, así que usted uso lo que muchos programadores llegamos a
utilizar en nuestro inicios, establecer la cadena de conexión en cada método o función donde
necesitemos comunicarnos con la Bd, algo como esto:
C#:
using System.Data.SqlClient;
private void btnProbar_Click(object sender, EventArgs e)
{
using(SqlConnection cnx = new SqlConnection("Data Source=LUISESCOBAR-
PC;Initial Catalog=Directorio;Integrated Security=True"))
{
cnx.Open();
MessageBox.Show(cnx.State.ToString());
}
}
y para los que tienen mas experiencia pero aun no llegan a conocer los beneficios del archivo de
configuración, establecer la cadena de conexión en una variable global del tipo String podría
aparentar ser una buena solución ya que se asigna una sola vez y se usa en todas las consultas
requeridas.
C#:
using System.Data.SqlClient;
namespace sinAppConfig
{
public class Connection
20. {
public static SqlConnection Conexion()
{
return new SqlConnection("Data Source=LUISESCOBAR-PC;Initial
Catalog=Directorio;Integrated Security=True");
}
}
}
Usamos la clase Connection:
private void btnProbar_Click(object sender, EventArgs e)
{
//Utilizamos la clase connection para abrir la cadena de conexion
using(SqlConnection cnx = Connection.Conexion())
{
cnx.Open();
MessageBox.Show(cnx.State.ToString());
}
}
Bien, continuando con nuestro caso hipotético, imagínese que después de algún tiempo se le
notifica de la necesidad de modificar el nombre del server o la ubicación física del mismo, trayendo
con esto la necesidad de modificar nuestra cadena de conexión pero, como declaro su cadena de
conexión en alguna clase publica o modulo para los de Vb.net y esta clase o modulo se comprimió
junto con el Exe al momento de crear su installer ya no tiene acceso a ella desde fuera del
proyecto, así que no tendrá otra opción que abrir su proyecto desde el Vs y modificar su cadena de
conexión en el lugar donde lo haya declarado, si es en una clase publica o modulo solo tendrá que
modificar una sola vez pero, si declaro la cadena en cada método o función donde se requería la
comunicación con la Bd tendrá un problema mas grande (aunque no monstruoso), en realidad
modificar la cadena de conexión no será el problema puesto que usando la combinación de teclas
Ctrl + F podrá fácilmente buscarla y reemplazarla por la nueva.
El problema viene al momento de pasar esta actualización a todas las instalaciones de su
Software, ya que como sabrá, al momento de hacer la modificación tendrá que compilar de nuevo
los proyectos (el que contiene su desarrollo y el proyecto Setup) e ir a cada equipo donde su
software este instalado, desinstalar y posteriormente instalar de nuevo su software, este es el
verdadero problema ya que como se abra dado cuenta, no es tarea sencilla ya que la actividad no
se resume en una acción si no en varias, ahora si consideramos la disponibilidad de los usuarios
para dejarnos trabajar a nosotros mientras ellos se retrasan en sus actividades, estaremos en un
problema.
21. ¿Solución? usar el archivo de configuración….
Si utiliza un archivo de configuración no tendrá tantos problemas, ya que el utilizarlo simplifica la
tarea a únicamente ir al directorio de instalación ubicar el archivo App.Config, abrirlo con un editor
de texto como NotePad, modificar su cadena de conexión, guardar y listo a seguir usando su
aplicación sin mas ni mas; no necesita abrir el proyecto en el Vs ni compilar, mucho menos instalar
De nuevo.
¿Comprende ahora la gran utilidad de este archivo tan simple?…
Hasta este punto creo que ya esta convencidos de la utilidad del archivo de configuración
2.2 FORMA N° 1 DE AGREGAR EL APPCONFIG
Clic en proyecto y propiedades de aplicación
22. clic en configuración, seguido coloca el cursor en donde está el espacio en blanco
o clic en la flecha, una vez hecho esto, inmediatamente en la parte derecha en el
árbol del proyecto aparece el archivo de configuración.
Abre el archivo appconfig con doble clic o clic derecho abrir copia y pega el
siguiente código y guarda cambios.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="APPcadena"
connectionString="server=127.0.0.1; database= bdbiblioteca;
Uid=root; pwd=123456"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
</configuration>
Las palabras resaltadas corresponden al nombre de la base de datos y a la
contraseña.
APPcadena: es el nombre que se utilizara para poder tener acceso a este
archivo
23. 2.3 FORMA N° 2 DE AGREGAR EL APPCONFIG
Sigue las imágenes los pasos se resaltaran de color
24.
25.
26.
27. Si se siguen todos los pasos te quedara de la siguiente manera
Nota: si haces todos los pasos y no sale nada, borra el proyecto, crea uno nuevo y
realiza los pasos nuevamente. Está a su gusto por cuál de los dos métodos de
agregar el archivo appconfig escoger, les recomiendo el primero.
28. Una vez agregado el archivo appconfig, solo queda configurarlo, para esto
abrimos el archivo con doble clic o clic derecho abrir, debe quedar algo igual a
esto:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add
name="WindowsFormsApplication1.Properties.Settings.bibliotecaConnectionSt
ring"
connectionString="server=127.0.0.1;user
id=root;password=123456;database=biblioteca"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
</configuration>
Solo falta cambiar lo que esta seleccionado por un nombre mas corto, de esta
manera se va a llamar la cadena de conexión y guardar cambios,quedaria asi:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="APPcadena"
connectionString="server=127.0.0.1; database= biblioteca;
Uid=root; pwd=123456"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
</configuration>
Nota: los elementos resaltados corresponden a la base de datos y la contraseña
de la misma
29. 3) AGREGAR LAS REFERENCIAS NECESARIAS PARA TRABAJAR CON MYSQL Y EL
ARCHIVO APPCONFIG.
Se agrega la referencia Mysql.data, para trabajar con todas las funcionalidades
de MySQL y system.configuration, necesario para manejar el archivo de
configuración, para esto damos clic derecho sobre references en el árbol del
proyecto y agregar referencia. En la pestaña .NET buscar el elemento
System.conguration y pulsar aceptar luego Mysql.data seguido también del
botón aceptar
30. 4) crear una carpeta en el proyecto de nombre MisClases, para esto clic derecho
sobre el proyecto, agregar, nueva carpeta.
5) Crear una clase de Nombre Cadena.cs en la carpeta creada, la cual se
comunicara con el archivo appconfig y obtendrá la cadena de conexión. Clic
derecho sobre la carpeta MisClases, Agregar,Clase, por ultimo aceptar.
31. Pegamos el siguiente código en la clase y guardamos cambios:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration; //para trabajar con el archivo de
configuracion
namespace Aplicacion.MisClases//nombre de la aplicación y carpeta de
clases es importante tener en cuenta los nombres tanto del proyecto como
la de la carpeta
{
class Cadena
{
public string CadenaApp;
public string Obtenercadena()
{
// este metodo se usa para obener la cadena de conexion que
// esta en el archivo appconfig en donde
//se encuentra la cadena de conexion
CadenaApp =
ConfigurationManager.ConnectionStrings["APPcadena"].ConnectionString;
return CadenaApp;
}
}
}
Nota:
“APPcadena” debe ser el mismo nombre que esta en el archivo de
configuracion
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="APPcadena"
connectionString="server=127.0.0.1; database= biblioteca;
Uid=root; pwd=123456"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
</configuration>
32. Para ver si todo va bien sobre la aplicación o sobre la solucion clic derecho
generar
33. 6) Insertar en el formulario todos los elementos necesarios para insertar,
editar, eliminar y buscar se agregan 5 label , 4 textbox ,2 groupbox y 4 botones y
en la propiedad name escribe los nombres que están en la imagen, luego en la
propiedad Charactercasing de cada textbox cambiarla a upper para que el texto
ingresado sea en mayúscula .
7) Mostrar Datos: Para que los datos que están en la tabla Usuarios se puedan ver en
el formulario a través del detegridview, es necesario agregar una clase de nombre
Mostrar.cs, para crearla se puede apoyase del paso 5, es decir
Clic derecho sobre la carpeta MisClases
Agregar
Clase
Verificar que Archivo de código este seleccionado
Colocarle el nombre Mostrar.cs
Clic en botón aceptar
Una vez que se crea la clase, se abre automáticamente, copia y pega el siguiente código
el cual tiene su explicación.
34. //biblioteca de clases creadas por el visual studio
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//biblioteca de clases creadas por el programador
using System.Data;// para operaciones con datos
using MySql.Data;// para operacines con mysql
using MySql.Data.MySqlClient;
using System.Windows.Forms;// para poder recibir controles por parametros
using Aplicacion.MisClases;// para tener acceso a la carpeta MisClases
namespace Aplicacion.MisClases //Cambia lo resaltado por el nombre del
proyecto que estes usando en caso que utilices otro nombre
{
class Mostrar//este es el nombre de la clase,si le colocaste otro
nombre cambialo aquí tambien
{
Cadena Obj = new Cadena();// creamos un objeto de la clase Cadena
/* PARAMETROS QUE RECIBE LA FUNCION MostrarDatos
* parametro 1: datagrid en donde se va mostrar los datos
* parametro 2: Nombre del procedimiento almacenado
* parametro 3: Dato buscado ejemplo cuando se busca por nombre
* parametro 4: Nombre del parametro que recibe el procedimiento
almacenado en la bd */
public void MostrarDatos(DataGridView dataGrid, string
Nombreprocedmiento, string DatoBuscado, string Nombreparametro)
{
Nombreparametro= "@"+ Nombreparametro;
string CadenaApp;
CadenaApp = Obj.Obtenercadena();// a traves del objeto Obj
accede a la clase cadena y retorna la cadena de conexion que envia el
appconfig
String stm = Nombreprocedmiento;
MySqlConnection conn = new MySqlConnection(CadenaApp); // se
crea un objeto de la clase MySqlConnection a el cual se le envia por
parametro la cadena de conexion
DataTable odtable = new DataTable();
MySql.Data.MySqlClient.MySqlDataAdapter odadapter = new
MySql.Data.MySqlClient.MySqlDataAdapter();
try
{
if (conn.State != ConnectionState.Open)
conn.Open();
MySqlCommand cmd = new MySqlCommand(stm, conn);
cmd.CommandType = CommandType.StoredProcedure;
35. cmd.Parameters.AddWithValue(Nombreparametro, "%" +
DatoBuscado + "%");// para que a mendidia que se escriba valla mostrando
los valores
cmd.Parameters[Nombreparametro].Direction =
ParameterDirection.Input;
odadapter.SelectCommand = cmd;
odadapter.Fill(odtable);
dataGrid.DataSource = odtable;
}
catch (Exception ex)
{
MessageBox.Show("No se puedes mostrar los datos verifique
la conexion e intente nuevamente !!" + ex.Message);
}
finally
{
if (conn.State != ConnectionState.Closed)
conn.Close();
conn.Dispose();
}
}
}
}
Se quiere que cuando se ejecute el formulario se carguen los datos de la tabla
usuarios por lo tanto esta clase se debe ejecutar cuando cargue el formulario.
Escribe lo siguiente en el load del form, para esto doble clic en cualquier parte del
form que no tenga control o doble clic en la barra de titulo del formulario.
quedara asi:
private void Form1_Load(object sender, EventArgs e)
{
}
36. Agrega los siguientes bibliotecas de clases esto va debajo de los demas using
using System.Data;// para operaciones con datos
using MySql.Data;// para operacines con mysql
using MySql.Data.MySqlClient;
using Aplicacion.MisClases;
por ultimo crear un objeto de la clase mostrar de arriba del load del form , copia y pega lo
que esta en su interior:
Mostrar MostrarUsuarios= new Mostrar();//objeto de la clase mostrar
private void Form1_Load(object sender, EventArgs e)
{
//El objeto MostrarUsuario accede a la clase Mostrar y hace
usuo de la funcion MostrarDatos
MostrarUsuarios.MostrarDatos(DrgListaUsuarios,
"BuscarUsuario", "", "NombreABuscar");
/*PARAMETROS DE LA FUNCION MostrarUsuarios
* DrgListaUsuarios: es el datagrid en donde se mostraran los
datos
* BuscarUsuario: es el nombre de procedimiento creado en la
bd es el que se va a ejecutar
* " " el tercer parametro es vacio para que muestre todos
los registros
* NombreABuscar:Es el nombre del parametro que recibe el
procedimiento almacenado BuscarUsuario que se encuentra en la bd debe ser
el mismo
*/
}
Nota: el objeto MostrarUsuario puede ir arriba del load o como se muestra en la siguiente imagen
37. Imagen de todo el proceso, ubica los codigos proporcionados en el lugar exacto
Una vez que hecho los pasos anteriores ejecuta el formulario con F5
Una de las características de la Programación orientada a objetos es reducir la
codificación, partiendo de este principio la clase Mostrar.cs es tan potente que esta
adaptada para que ejecute cualquier procedimiento almacenado similar al de
BuscarUsuarios, por ejemplo suponiendo que se tiene una tabla administrador con sus
respectivos id , nombres y demás y también se quiere buscar ya sea por nombre o por
38. apellido, solo tocaría crear un procedimiento almacenado para la nueva tabla crear un
nuevo objeto de la clase mostrar y mandarles los correspondientes parámetros en el load
del form o en donde se requiera.
8) Funcionalidad buscar: Esta función, ejecuta el mismo procedimiento almacenado
utilizado en la función mostrar, solo que esta vez en el espacio “ ” correspondiente al
tercer parámetro será cambiado por el texto que se escriba en el textbox TxtBuscar, para
esto darle doble clic sobre el control TxtBuscar y agregar el siguiente código :
MostrarUsuarios.MostrarDatos(DrgListaUsuarios,
"BuscarUsuario",this.Txtbuscar.Text, "NombreABuscar");
Quiedaria asi
private void Txtbuscar_TextChanged(object sender, EventArgs e)
{
MostrarUsuarios.MostrarDatos(DrgListaUsuarios,
"BuscarUsuario",this.Txtbuscar.Text, "NombreABuscar");
}
Imagen
Ejecuta el formulario con F5, veras que inicialmente se cargan en el datagridview
DrgLIstaUsuarios todos los registros que están en la tabla usuarios, al ingresar la
primera letra en el textbox buscar (Txtbuscar) veras que en el datagrid solo se cargaran
los usuarios que tengan la letra o frase a buscar en cualquier parte de la palabra (inicio,
mitad, final).asi por ejemplo si escribimos textbox buscar (Txtbuscar) la letra J o se
39. escribe la palabra completa johana, solo muestra todos los datos del usuario Johana,
puesto que es el único usuario que tiene esas letras en su nombre asi:
Pero si escribimos la letra I como inicio de una palabra el usuario Johana no será
mostrado por que no tiene I en ninguna parte del nombre:
Y si se escribe las letras IA, solo mostrara a RICARDO ANTONIO RODRIGUEZ que es el
único usuario que tiene en su Nombre esas letras, más específicamente en el segundo,
cuarto, siete y doce carácter correspondientes solo al nombre.
40. 9) Funcionalidad Insertar datos a la bd (Insertar Usuarios): Para guardar los datos al
pulsar (BtnGuardar), se ejecutara a través de un objeto una clase de nombre
Insertar(próxima a crear), esta comunicará con el procedimiento almacenado
InsertarUsuario creado en la bd y guardara los datos. Para crear la clase, guíate del
paso 5 para hacer lo siguiente:
Clic derecho sobre la carpeta MisClases
Agregar
Clase
Verificar que Archivo de código este seleccionado
Colocarle el nombre Insertar.cs
Clic en botón aceptar
Una vez que se crea la clase, se abre automáticamente, copia y pega el siguiente código
el cual tiene su explicación.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// Biblitecas de clases importadas por el programador
using System.Data;// para operaciones con datos
using MySql.Data;// para operacines con mysql
using MySql.Data.MySqlClient;
using System.Windows.Forms;
using Aplicacion.MisClases;
namespace Aplicacion.MisClases
{
class Insertar
{
Cadena Obj = new Cadena();// declaramos los objeto de la clase
cadena
public void InsertarUsu(string Nombreprocedmiento, string
ParametroBd1, string ParametroBd2, string ParametroBd3, string TxtId,
string TxtNombre, string TxtApellido)
{
/*PARAMETROS DE LA FUNCION INSERTARUSU
* Nombreprocedmiento: nombre del procedimieto almacenado que
tiene la sentencia del insert
* ParametroBd1: parametro 1 del procedimiento almacenado
InsertarUsuario corresponde al PID
* ParametroBd2: parametro 2 del procedimiento almacenado
InsertarUsuario corresponde al PNombre
* ParametroBd3: parametro 3 del procedimiento almacenado
InsertarUsuario corresponde al PApellido
* TxtId: parametro que recibe lo que se escribe en el
textbox id
41. * TxtNombre:parametro que recibe lo que se escribe en el
textbox nombre
* TxtApellido:parametro que recibe lo que se escribe en el
textbox apellido
*
Todos estos parametros seran mandados a esta clase desde el formulario
que tenga el boton guardar
*/
string CadenaApp;
CadenaApp = Obj.Obtenercadena();// le asigamos la cadena de
conexion a la variable CadenaApp
MySqlConnection conn = new MySqlConnection(CadenaApp);
DataTable odtable = new DataTable();
MySql.Data.MySqlClient.MySqlDataAdapter odadapter = new
MySql.Data.MySqlClient.MySqlDataAdapter();
try
{
if (conn.State != ConnectionState.Open)
conn.Open();
MySqlCommand cmd = new MySqlCommand(Nombreprocedmiento,
conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("?" + ParametroBd1, TxtId);
cmd.Parameters["?" + ParametroBd1].Direction =
ParameterDirection.Input;
cmd.Parameters.AddWithValue("?" + ParametroBd2,
TxtNombre);
cmd.Parameters["?" + ParametroBd2].Direction =
ParameterDirection.Input;
cmd.Parameters.AddWithValue("?" + ParametroBd3,
TxtApellido);
cmd.Parameters["?" + ParametroBd3].Direction =
ParameterDirection.Input;
odadapter.SelectCommand = cmd;
cmd.ExecuteNonQuery();
//MessageBox .Show("Usuario Guardado Con
Exito!!",MessageBoxIcon.Information);
MessageBox.Show("Los datos se han inserttado exitosamente
", " SISVEUG SOFTWARE ", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(" No se pueden guardar los datos n
ERROR: " + ex.Message, "Aplicacion de ejemplo ", MessageBoxButtons.OK,
MessageBoxIcon.Stop);
// MessageBox.Show("No se puedo guardar!! ","ejemplo
",MessageBoxButtons.OK,MessageBoxIcon.Information);
42. }
finally
{
if (conn.State != ConnectionState.Closed)
conn.Close();
conn.Dispose();
}
}
}
}
En el caso de que se tenga otra tabla con tres campos esta clase funcionara exitosamente
solo hay que cambiarles los parametros a la hora de llamar a la funcion.Una vez que esta
clase este creada se guarda y se genera el proyecto a ver si no hay errores, luego en el
formulario doble clic en el boton guardar y pega el siguiente codigo en la parte de
arriba:
Insertar InsertarRegistros = new Insertar();
Luego en el interior de la funcion
InsertarRegistros.InsertarUsu("InsertarUsuario", "Pid", "PNombre",
"PApellido", this.TxtId.Text, this.TxtNombre.Text,
this.TxtApellido.Text);
/*PARAMETROS DE LA FUNCION
* InsertarUsuario: nombre del procedimieto almacenado que tiene la
sentencia del insert
* Pid: parametro 1 del procedimiento almacenado InsertarUsuario
* PNombre: parametro 2 del procedimiento almacenado InsertarUsuario
* PApellido: parametro 3 del procedimiento almacenado InsertarUsuario
* TxtId: se envia por parametro lo que esta escrito en el textbox del id
* TxtNombre:envia que recibe lo que se escribe en el textbox nombre
* TxtApellido:envia que recibe lo que se escribe en el textbox apellido
*/
MostrarUsuarios.MostrarDatos(DrgListaUsuarios, "BuscarUsuario", "",
"NombreABuscar");// para que cuando se guarden los datos
// se actualize el datagrid y se muestre es que se acaba de
ingresar
Quedaria asi:
Insertar InsertarRegistros = new Insertar();
private void GuardarBtn_Click(object sender, EventArgs e)
{
InsertarRegistros.InsertarUsu("InsertarUsuario", "Pid", "PNombre",
"PApellido", this.TxtId.Text, this.TxtNombre.Text,
this.TxtApellido.Text);
MostrarUsuarios.MostrarDatos(DrgListaUsuarios, "BuscarUsuario", "",
"NombreABuscar]
}
44. 10) Funcionalidad Editar: Se quiere que dando clic derecho sobre el registro se
muestre un menú con la opción de editar el cual mandara los datos a los textbox para
poder cambiarlos y al pulsar el botón editar se actualizarán, para esto se reutilizara una la
de Insertar previamente hecha, doble clic en el botón editar y escribe lo siguiente:
//ya no se escibe Insertarusuario sino EditarUsuario
InsertarRegistros.InsertarUsu("EditarUsuario", "Pid", "PNombre",
"PApellido", this.TxtId.Text, this.TxtNombre.Text,
this.TxtApellido.Text);
/*PARAMETROS DE LA FUNCION
* InsertarUsuario: nombre del procedimieto almacenado que tiene la
sentencia del EDITAR
* Pid: parametro 1 del procedimiento almacenado InsertarUsuario
* PNombre: parametro 2 del procedimiento almacenado InsertarUsuario
* PApellido: parametro 3 del procedimiento almacenado InsertarUsuario
* TxtId: se envia por parametro lo que esta escrito en el textbox del id
* TxtNombre:envia que recibe lo que se escribe en el textbox nombre
* TxtApellido:envia que recibe lo que se escribe en el textbox apellido
MostrarUsuarios.MostrarDatos(DrgListaUsuarios, "BuscarUsuario", "",
"NombreABuscar");// para que cuando se guarden los datos
// se actualize el datagrid y se muestre lo que se acaba de
ingresar
Código junto a la función clic del botón
// como ya el objeto InsertarRegisto se creo en el paso anterior no es
necesario volverlo a crear, pero si por el contrario si se le quiere dar
una clase especifica para editar si hay que crear un objeto
private void BtnEditar_Click(object sender, EventArgs e)
{
InsertarRegistros.InsertarUsu("EditarUsuario", "Pid", "PNombre",
"PApellido", this.TxtId.Text, this.TxtNombre.Text,
this.TxtApellido.Text);
MostrarUsuarios.MostrarDatos(DrgListaUsuarios, "BuscarUsuario", "",
"NombreABuscar");
}
45. Ahora solo falta que al darle clic sobre cualquier registro se muestre un menú con la
opción Editar, para esto realiza los siguientes pasos:
Selecciona el datagrid y en la propiedad selection mode escoge FullRowSelect,
para que al darle clic a una celda en especial se seleccione toda la fila tal como se
muestra en la imagen:
Agrega el control contextMenuStrip , clic en él y escribir Editar
y eliminar
Selecciona el datagrid y en la propiedad contextMenuStrip escoge
contextMenuStrip1 para que cuando se dé clic derecho salga el menú anterior, es
decir se le esta asignando el menú al datagrid.
46. Selecciona contextMenuStrip y doble en el menú editar y escribe lo siguiente
this.TxtId.Text=(string)DrgListaUsuarios.CurrentRow.Cells["Id"].Value;//s
e le asigna al texbox id el contenido de la celda ID del datagrid
this.TxtNombre.Text=(string)DrgListaUsuarios.CurrentRow.Cells["Nombre"].V
alue;//se le asigna al texbox Nombre el contenido de la celda Nombre del
datagrid
this.TxtApellido.Text=(string)DrgListaUsuarios.CurrentRow.Cells["Apellido
"].Value;//se le asigna al texbox Apellido el contenido de la celda
Apellido del datagrid
Código junto a la función clic del menú editar
private void editarToolStripMenuItem_Click(object sender, EventArgs e)
{
this.TxtId.Text=(string)DrgListaUsuarios.CurrentRow.Cells["Id"].Value;//s
e le asigna al texbox id el contenido de la celda ID del datagrid
this.TxtNombre.Text=(string)DrgListaUsuarios.CurrentRow.Cells["Nombre"].V
alue;//se le asigna al texbox Nombre el contenido de la celda Nombre del
datagrid
this.TxtApellido.Text=(string)DrgListaUsuarios.CurrentRow.Cells["Apellido
"].Value;//se le asigna al texbox Apellido el contenido de la celda
Apellido del datagrid
}
Nota: los campos resaltados deber ser los mismos que se muestran en el datagrid, es
decir tal cual como se muestra al cargar el formulario
Para probarlo ejecuta con F5,clic derecho sobre cualquier registro y editar, cambia
los valores en los textbox y clic enel boton editar actualizar al usuario
47.
48.
49. 10) Funcionalidad Eliminar: En el paso anterior se agregó un contextMenuStrip el cual
se asignó al datadrid y se programó la opción Editar, ahora solo falta programar la función
eliminar.
Agrega una nueva clase en la carpeta MisClases de nombre Eliminar y
pega el siguiente código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;// para operaciones con datos
using MySql.Data;// para operacines con mysql
using MySql.Data.MySqlClient;
using System.Windows.Forms;
using Aplicacion.MisClases;
namespace Aplicacion.MisClases
{
class Eliminar
{
Cadena Obj = new Cadena(); // objeto de la clase cadena
public void EliminarDatos(string NombreprocedmientoBd, string
ParametroBd, string valorEliminar)
{
string CadenaApp;
CadenaApp = Obj.Obtenercadena();// le asigamos la cadena de
conexion a la variable CadenaApp
// llamamos a la clase obtener cadena
// Int64 valor =
(Int64)datautor.CurrentRow.Cells["idautor"].Value;
String stm = NombreprocedmientoBd;
MySqlConnection conn = new MySqlConnection(CadenaApp);
DataTable odtable = new DataTable();
MySql.Data.MySqlClient.MySqlDataAdapter odadapter = new
MySql.Data.MySqlClient.MySqlDataAdapter();
try
{
if (conn.State != ConnectionState.Open)
conn.Open();
MySqlCommand cmd = new MySqlCommand(stm, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("?" + ParametroBd,
valorEliminar);
cmd.Parameters["?" + ParametroBd].Direction =
ParameterDirection.Input;
odadapter.SelectCommand = cmd;
cmd.ExecuteNonQuery();
MessageBox.Show("Registro Eliminado Con Exito!!",
"Sistema Vertical", MessageBoxButtons.OK, MessageBoxIcon.Information);
// mostraraut(textBox1.Text);
}
catch (Exception ex)
{
50. MessageBox.Show("No se puedo guardar!!" + ex.Message);
}
finally
{
if (conn.State != ConnectionState.Closed)
conn.Close();
conn.Dispose();
}
}
}
}
Doble clic sobre la opcion Eliminar del contextMenuStrip y pega el siguiente
código
string Id =
Convert.ToString(DrgListaUsuarios.CurrentRow.Cells["Id"].Value);
string Nombre =
Convert.ToString(DrgListaUsuarios.CurrentRow.Cells["Nombre"].Value);
DialogResult dialog = MessageBox.Show("Esta seguro que desea eliminar el
este registro " + Id + " " + Nombre + " No se podran deshacer los
cambios", "Eliminar Usuario", MessageBoxButtons.OKCancel,
MessageBoxIcon.Exclamation);
if (dialog == DialogResult.OK)
{
EliminarCliente.EliminarDatos("EliminarUsuario", "PId",
Id);
MostrarUsuarios.MostrarDatos(DrgListaUsuarios,
"BuscarUsuario", "", "NombreABuscar");
}
Código junto a su función clic de menú eliminar
private void eliminarToolStripMenuItem_Click(object sender, EventArgs e)
{
Eliminar EliminarCliente = new Eliminar();// Objeto de la clase eliminar
string Id =
Convert.ToString(DrgListaUsuarios.CurrentRow.Cells["Id"].Value);
string Nombre =
Convert.ToString(DrgListaUsuarios.CurrentRow.Cells["Nombre"].Value);
DialogResult dialog = MessageBox.Show("Esta seguro que desea eliminar el
este registro " + Id + " " + Nombre + " No se podran deshacer los
cambios", "Eliminar Usuario", MessageBoxButtons.OKCancel,
MessageBoxIcon.Exclamation);
if (dialog == DialogResult.OK)
{
EliminarCliente.EliminarDatos("EliminarUsuario", "PId",
Id);
MostrarUsuarios.MostrarDatos(DrgListaUsuarios,
"BuscarUsuario", "", "NombreABuscar");
}
}
52. Conclusión
Al haber realizado este trabajo se puede apreciar la forma correcta de conectar
MySql con VS, a través del archivo de configuración y clases. A demás se puede
notar las características de la programación orientada a objetos como la
reutilización de código, asi por ejemplo la clase InsertarUsuario inicialmente se
creo para correr el procedimiento almacenado de inserción, pero con esta
propiedad de la P.O.O se pudo adaptar para que ejecutara el procedimiento
almacenado EditarUsuario.
Espero que este articulo sea de gran ayuda para ustedes y no olviden dejar algún
comentario si les gusto.