Conectarse a MySQL desde C# [Visual Studio 2010]

Buenas noches a todos!, en esta entrada vengo a hacer un ejemplo que ya hemos hecho en Java, pero ahora vengo a presentarles como hacerlo desde C# (o VisualBasic que es casi igual).

Lo que vamos a necesitar para esta practica es tener el conector de MySQL para .NET, lo podemos descargar de aqui.

Primero iniciaremos un proyecto nuevo de winforms con C# en Visual Studio 2010, y crearemos una UI muy simple, que contendra un data grid view y un boton para realizar la consulta, mirandose de la siguiente manera:

image

La base de datos es la misma usada en ejemplos anteriores, es la BD Sakila que se puede descargar desde la pagina de MySQL, si no haganla con la BD que ustedes deseen.

Para comenzar tenemos que tener instalado el connector que ya les puse arriba y por si acaso tendremos que agregarlo en referencias:

image

Y acontinuacion buscamos MySQL.Data

image

Y damos OK.

En nuestro Form, nos vamos al codigo para empezar a realizar la conexion a la Base de datos

Agregamos la biblioteca de MySQL a nuestra seccion “using”

image(disculpen lo derecho que rayo con mi marcaTextos XD)

Y despues vamos a realizar un metodo llamado iniciarConexion() (al igual como lo hicimos en Java) que lo mandamos a llamar en el constructor

image

Utilizamos MySqlConnection para realizar la conexion, esta clase es proporcionada por MySql.Data.MySqlClient. En lo que tengo resaltado, simplemente creamos un objeto connection y una cadena, que guardara todos los datos de conexion a nuestra base de datos en mySQL.

Enl los bloques try- catch se realiza la conexion, primero estableciendo toda la informacion que se tiene en esa cadena, en Uid pones el nombre de tu usuario de mySql y en Pwd tu password. Se asigna esa cadena a ConnectionString para que asi con Open realize la conexion. En dado caso de que el usuario o el password o algun dato en la cadena este mal pues surgira el mensaje puesto dentro del bloque catch.

image

Una vez conectados a MySQl, ahora hay que hacer querysOpen-mouthed smile

Primero debemos de crear una clase que se llamara Actor.cs, con 2 propiedades como se muestra:

image

recuerdan donde creamos la cadenta connectionString?, debajo de el declararemos una Lista global que contendra objetos de tipo Actor y lo podemos hacer de la siguiente manera:

image

Y con el boton que hemos agregado, vamos a dar doble clic para crear un evento y poner el siguiente codigo:

image

Vamos por pasos:

primero creamos un objeto de la clase MySqlCommand que sera nuestro objeto que realiza la consulta, en CommandText le asignamos que consulta hara, en este caso es un simple SELECT con 2 campos de la tabla Actor;

De MySqlDataReader creamos el objeto reader que este sera el que reciba los datos devueltos por la consulta. Yo creo que queda mas que claro en la tercer linea con ExecuteReader se ejecuta la consulta y devuelve un objeto que contiene todos los datos, y este viene siendo el objeto reader.

En este bucle while la condicion esta en el metodo Read, afirma si hay o no resultados en la consulta, si los hay se posisionara en la primer fila de los resultados (por que lo que devuelve la consulta es otra tabla) mientras se siga comprobando si hay mas resultados, Read ira posicionando a filas diferentes de la tabla para asi agarrar los resultados de las demas filas, se crea un objeto Actor y se le asignan las 2 propiedades correspondientes de la fila actual que arrojo la consulta, y se agregan a la lista listaActores, y posteriormente, cuando ya se tienen todos los datos guardados en la lista, se le asigna un datasource a nuestro data grid view y este viene siendo la lista

Ahora hay que liberar recursos!, ya que por lo regular siempre se hacen mas de dos consultas, para eso nos vamos debajo de donde asignamos el datasource a nuestro grid view

image

y tambien algo muy importante, es cerrar la conexion, lo haremos en un evento del form “FormClosing”

image

Y el resultado final sera el siguiente:

image

Espero y les sea de ayuda Open-mouthed smile

Saludos! & Code4Fun

About these ads

80 comentarios en “Conectarse a MySQL desde C# [Visual Studio 2010]

  1. oye men un problema. al terminar de instalar el conector de mysql .net este no aparece en mi lista de referencias …. a que se podría deber esto??

    • Es curioso! pero tiene que estar!, estas seguro de haber buscado bien!? ya que es una lista larga!, ya es un poco tarde!, cuando descanse un poco me pondré a revisar eso ok!

  2. tienes que agregar la refrencia de forma manual. esta en Windows\.net\etc etc etc

    La funcincion

    MySqlDataReader reader = ExecuteReader();

    ¿especificamente ExecuteReader(); me da error, a que se debe?

    PD: esto me sirve para agregar datos o solo para leer?

  3. tengo una pregunta???
    ya INSTALE EL DRIVER pero cuando voya hacer la referencia no en cuentro mysql.data.
    como hago???

  4. hola tengo un problema, tengo una aplicacion en la cual puedo ralizar todo tipo de consultas a la BD MySQL desde el VS2010, pero cuando intento correr el .exe de la carpeta release me da error de conexion con la BD….q puede ser esto???

  5. gracias amigo me ayudaste mucho, saludos

  6. Excelente tutorial bastante practico y rapido, yo tambien siempre he tenido problemas con el conector de MySql para .net asi que descargo el .dll y lo agrego manualmente y funciona correctamente y tambien hay que instalar el ejecutable si quieren generar la aplicación,

    Seria bueno agregarle algo de seguridad para evitar las inyecciones SQL si quieren hacer aplicaciones para productividad, gracias por el tutorial.

  7. excelente tutorial, me ayudó mucho casi me vuelvo loca con tanto conector que instalé y desinstalé y ni hablar de las versiones de visual gracias por tu aportación :)

  8. Muchas gracias Issac, clarito y al grano… gracias!!! : )))

  9. hola de nuevo Isaac pues te comento que continuando con lo de la conexión, estoy haciendo altas, bajas y cambios; las dos anteriores las realiza pero en la parte de hacer cambios, no me deja siempre aparece el mje de que no exite el usuario, si puedieras publicar un tutorial acerca de eso u orientarme mas o menos como puedo hacerle te lo agradecería; son muy buenas tus explicaciones y muy claras gracias y que Dios te siga dando inteligencia para que nos ayudes jiji, saludos

    • Hola Cynthia! que bueno que te funcionan estos tutos jeje, mira pues necesitarías ser mas explicita con tu problema para poder ayudarte mejor, muéstrame mas que estas haciendo ya que en este tutorial solo hago consultas (ninguna alta/baja/cambio) es sencillo y es casi lo mismo, yo hago un Select en este tutorial, faltaria hacer un formulario para hacer un insert(alta) que ya te funciona, una baja(delete) y un cambio (update), dime un poco mas detallado donde es tu falla :), igual tengo tutoriales de altas bajas y cambios pero no son en C#, si te interesa puedes buscar en la seccion de Java. Saludos!

      • hola Isaac pues te cuento que ya pude con las modificaciones, era una tontería, solo me faltaba colocar bien los nombres de los campos en la consulta, en fin ahora tengo otro problemilla…. quiero hacer una consulta que me traiga solo los registros que yo quiero es decir, si en un campo d texto coloco la letra ‘c’ que me traiga todos los registros que inician con esa letra en forma de lista o en un gridview, bueno espero que puedas ayudarme gracias :)

      • Mira esto es algo sencillo, y esto es igual a este post, lo que cambia es la consulta, estamos usando MySQL asi que podemos usar la notación “like” y el comodín “%” , podríamos hacer una consulta así :

        SELECT * FROM personas WHERE nombre LIKE “c%”

        de esta manera establecimos un patrón y el caracter % representa cualquier cosa, estamos indicando que me muestre los registros que su nombre empiecen con la letra ‘c’

        si quieres que te “autocomplete” mientras estas escribiendo ahi es un poco diferente y se necesitaria profundizar un poco mas. Saludos

  10. hola Isaac ya lo hice era justo lo que necesitaba muchas gracias por tu ayuda, saludos :)

  11. otra vez molestando jiji, no se si sea correcto que te deje esta duda aquí pero bueno te comento que estoy desarrollando un sitio web con visual studio 2010 y tengo un checkbox, dos dropdownlist y un gridview lo quiero hacer es que al seleccionar el checkbox llene los dropdownlist y el gridview con registros de la bd que esta en mysql ojala puedas ayudarme gracias :)

  12. hola isaac ya lo resolví pero ahora quisiera llenar un dropdownlist a partir de otro, es decir, al elegir una opcion del 1er dropdownlist me muestre registros en el 2o dropdownlist espero que puedas ayidarme, gracias saludos desde el edo. de Mex. :)

  13. Saludos
    para todos aquellos que no encontraron la referencia Mysql.Data solo reinicien su computador y listo.

  14. Hola me ha servido bastante bro gracias, no se si me pudieras ayudar necesito hacer el query pero tomando un dato de un textbox es para hacer un loggin, “SELECT * FROM `users` WHERE `user` = Textbox1.Text “; algo asi pero no me funciona, ojala me puedas orientar gracias.

    • Así como lo haces esta “medio” bien, haces la consulta y tienes que concatenar la cadena que esta en el textbox “select * from users where user=”+Textbox1.Text; si es como lo pusiste en este comentario el error tal vez era de sintaxis, que error te tira para así poder ayudarte mejor!

      • Ya lo pude hacer, quedo parecido algo asi “select * from `usuarios` where `user` = ‘”+ textbox1.text + “‘”; gracias por la ayuda.

  15. como puedo borrar todo lo de las variables para poder hacer varias veces las consultas

  16. ola isaac tengo actualmente un programa en vs2010 pero ando trabajandolo en c++ quiero enlazar dicha base de datos hacer peticiones y guardar informacion en la base de datos mientras se ejecuta el programa el cual renovara y guardara info en dicha bd todo el programa esta relacionado con una interfaz, no se si podrias ayudarme en como hacer la conexion con mi programa y la bd en mysql.

    Saludos

    • Es necesario que trabajes en C++?, es trabajo de escuela o profesional?, no se nada de C++ pero .net ofrece lenguajes mas amigables.

      Como lo hice en este Post, ADO.NET es igual para todos los lenguajes soportados por .NET, dependiendo del origen de datos (en este post es MySQL) puede variar, pero todas las clases que se usan y la forma en que se hace (sin tomar en cuenta el lenguaje) seria practicamente igual.

      Saludos

  17. es para trabajo profesional y el problema es q todo el programa lo tengo en c++ y bueno la idea q tenia era adicionar la conexion y el codigo con la parte de actualizacion de la bd, Isaac por casualidad no tienes idea alguna o quizas algun codigo efectivo del q podria guiarme?
    los problemas con los q usualmente me encuentro son problemas con las librerias y la compilacion debido a q estoy programando en windows 7 x64 con vs2010 x64 .

    saludos

  18. hola Isaac

    otra vez molestando jiji, bueno antes q nada gracias x tu ayuda me ha servido d mucho, bueno estoy tratando d realizar un carrito d compras con gridviews, lo hago con session y quisiera hacer calulos en el grid sin conectarme a la bd hasta q ya tenga todos los productos en el carrito, espero q haber sido clara y espero q puedas ayudarme, gracias :)
    saludos

  19. Muy bueno el tutorial! Me ayudo bastante!

  20. hola isaac ya hice lo del carrito ahora el problema es q no lo guarda en la bd, bueno seguiré peléandome con este sistema jiji, saludos :)

  21. hola Isaac

    ya pude hacer lo del carrito, ya guarda en la bd y estoy trabajando con ado.net, bueno ahora lo único q me falta es el reporte estoy trabajando con crystal reports, tendrás algún tutorial sobre eso? ya lo intenté d muchas formas y nada :( , tiene q mostrar datos d 3 tablas, espero q me puedas ayudar con eso, muchas gracias, saludos

  22. Pingback: Conexión a MySQL desde Visual Studio 2010 (1era. Parte) | Comiendo Nubes ^^

  23. Isaac, muchas gracias, simple y directo, yo estoy haciendo un trabajo de la escuela y en lugar de un datagrid, estoy usando un listview y en lugar de crear una clase y una lista global cree un ListViewItem para ir rellenando el ListView, la pregunta es: ¿Esta forma de trabajar que use tiene alguna desventaja o simplemente son 2 formas diferentes de hacer las cosas?

    Saludos

    • Esta bien como tu lo haces, simplemente yo pienso que la única desventaja es que te lleva a hacer un poco mas de trabajo, pero pues es casi nada la diferencia.

      Saludos y gracias por pasarte por mi blog!

  24. Muchas gracias por esta informacion, estaba buscando como conectar esta base en c#, pero no sabia como, me ha servido bastante. :)

  25. tengo un problema y es este que me tira la execion: “Conecxion Fallida: Unable to connect to any of the specified mysql hosts”

  26. Hola a tod@s.
    Tengo un pequeño problema, y es que hago una consulta para verificar un usuario y un pass, y me la hace bien, pero cuando quiero saber el numero de filas que hay, (para comprobar si hay 2 usuarios con mismo nombre y mismo pass o ninguno) que en php es con mysql_fetch_row en C# no se como lo tengo que hacer.

    En principio tambien me dá un error al usar por segunda vez en la misma consulta un MySqlDataReader

    Este es el codigo:

    try
    {
    //crear una cadena con los datos de conexion
    connectionString = “server=servidor;User Id=usuario;database=baseDeDatos;Password=contraseña;”;
    //conectar con la db
    connection.ConnectionString = connectionString;
    //abrir la conexion
    connection.Open();
    //hacer una consulta para ver si existe el usuario
    string consulta = “SELECT * FROM tabla_de_la_db WHERE nick = ‘” + entraNombre + “‘”;
    string consultaCount = “SELECT COUNT(*) FROM tabla_de_la_db WHERE nick = ‘” + entraNombre + “‘”;
    //envar la consulta
    MySqlCommand cmd = new MySqlCommand(consulta, connection);
    MySqlCommand cmdCount = new MySqlCommand(consultaCount, connection);
    //recojer los datos
    MySqlDataReader leerDatos = cmd.ExecuteReader();
    MySqlDataReader contarDatos = cmdCount.ExecuteReader();

    while (leerDatos.Read())
    {
    MessageBox.Show(“nombre: “+leerDatos["nick"]+” pass: “+leerDatos["pass"],”Tus datos”);
    }
    connection.Close();
    }
    catch(MySqlException ex)
    {
    MessageBox.Show( Convert.ToString(ex));
    }

    ¿como consigo el numero de usuarios que hay en la base de datos con el nick y el pass insertados?

    • Saber el numero de resultados en un DataReader no es posible, porque es un fetch array como en PHP, en cambio PHP si ofrece la forma de saber el resultado como dices, pero en C# no he encontrado la manera porque hace un tiempo si necesitaba saber lo mismo que tu. Ahorita no tengo tiempo para buscar pero lo que te recomiendo es que busques en google, que es mas sabio que yo JAJA.
      Saludos!

  27. ¿Pero hay forma de saber el numero de resultados de una consulta a MySql?

    En teoria esto es para consegir el numero de resultados:

    string consultaCount = “SELECT COUNT(*) FROM tabla_de_la_db WHERE nick = ‘” + entraNombre + “‘”;

    ¿Pero como saco el numero obtenido por “consultaCount” y lo paso a “MessageBox.Show”?

    Llevo varios dias buscando y no encuentro la forma, estoy perdido…

    • Ok con esa consulta que me acabas de mostrar se puede hacer lo siguiente:

      simplemente al momento de ejecutar la consulta hazlo con ExecuteExcalar() del objeto DataCommand en vez de ExecuteReader

      Saludos

  28. Excelente, ¿Cual es la diferencia de esto y utilizar un ODBC?

  29. Muchas gracias, me sirvió muchísimo para lograr conectarme y de base para mi proyecto.
    Saludos desde Chile.

  30. Muchisisisisisimas gracias !
    me sirvio muchisimo

  31. q tal amigo yo ya lo habia echo hace algunos ayeres hoy tengo otra duda tal vez me puedas ayudar, deceo hacer lo mismo pero conectandome desde una pc a la base de datos que este en un servidor podrias ayudarme?

  32. es un buen tutorial facil de enteder gracias lo estoy probando

  33. Muchas Gracias…. Un gran aporte y con mucho detalle,

  34. This piece of writing will assist the internet visitors
    for creating new webpage or even a blog from start to end.

  35. hola una pregunta si tengo dos maquinas en una la base de datos y en la otra la aplicacion mi pregunta seria… Como conecto la aplicacion (hecha en .net) con la base de datos???

    • Sencillo, solo en la cadena de conexion tienes que expecificar la direccion ip del servidor donde se encuentra la base de datos

      • hola isaac si de hecho ya lo hice y cuando corro la aplicacion en la otra maquina me manda error de conexion ya mande untelnet y tengo ping entre las dos maquinas…

      • Abre el puerto, primero apaga el firewall donde se encuentra la base de datos, y si funciona, nomas abre en el firewall el puerto que usas para la BD

        Saludos

      • Ok seria en las dos o solo en una???? ya abri el puerto 3306 y mi conexion es la siguiente:
        _cadena=”server=10.0.100.41;port=3306;user id=root;password=root;database=talleridiomas”

        _cadena es mi variable estring, y en server si coloco localhost si funciona pero si coloco la ip me manda error, esto en la misma maquina. manejo appserver.

  36. se me olvidaba el puerto la abri en la maquina donde esta mi base de datos mysql…

  37. hola tengo un problema con el DataGridView.DataSource en mi visual esto no me aparece o me lo marca como error, no se que libreria tendria que exportar o que error es el que estoy cometiendo

    • Podrías ser mas específico con el error?, en teoría, si seguiste el post al pie de la letra, no deberías tener problemas, lo mas probable es algo de configuración o no se. Saludos!

  38. ola issac necsito ayuda de como crear la conexion con mysql en C# haciendolo con el login espero me ayudes porto

  39. muy buen tuto solo que hay un detalle que pasa cuando es remoto y para poder conectar a mysql te pide autentificacion o permiso de ip publica

  40. Gracias amigo muy interesante, me funciono y me dio mas ideas sigue aportando mas tutoriales

  41. Hola consulta de adonde saco el server con el ip antes del usuario y contraseña saludos

  42. ISAAC, ME PARECE INTERESANTE.
    PERO EN LA ACTUALIDAD LOS DESAFIOS SON EN LO MAS BASICO; CREAR UN MANTENIMIENTO (CON O SIN MVC4) CON DB MYSQL Y PERMISOS DE USUARIOS.

    UNA PREGUNTA, TENDRAS ALGUN TUTORIAL O EJEMPLOS DEL CASO.

    DESDE YA MUCHAS GRACIAS.

    • Que tal!

      Mira material MVC no tengo propio pero en http://asp.net/mvc encontrarás de lo más nuevo y con SQL Server y Entity Framework, pero puedes hacer exactamente lo mismo pero usando MySQL ya que EntityFramework lo abstrae a un nivel más alto que ya no importa el motor. Lamentablemente ya no tengo tiempo para agregar más material actualizado al blog, pero seguro me pondré al tanto un día de estos.

      Saludos

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s