post icon

Ejecutar Procedimientos Almacenados en MySQL con C#

Anteriormente veníamos viendo como ejecutar procedimientos almacenados en otros lenguajes, hoy veremos un lo mismo pero en C# y trabajaremos una base de datos MySQL, aunque también el ejemplo sirve para usarlo con otros motores, es solo cuestión de cambiar los objetos command y connection, por los proveedores para esos motores, pero la lógica sería la misma.

Para el ejemplo supongo que ya tienen  armados los objetos en la base de datos, como la tabla, el procedimiento con sus parámetros de entrada y demás, así solo me centraré en el código de la aplicación.

La primer clase correspondería a la de conexión y la segunda a la clase que tiene el método que se encarga de utilizar la conexión y ejecutar el SP.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using System;
using System.Text;
 
namespace DevTroce.Conexion
{
    public class MySQL
    {
        private static MySql.Data.MySqlClient.MySqlConnection connMY = new MySql.Data.MySqlClient.MySqlConnection();
 
        private static string CrearCadena() {
            //String para cadena de conexion
	        StringBuilder sCadena = new StringBuilder("");
 
            sCadena.Append("Server=<SERVIDOR>;");
            sCadena.Append("Port=<PUERTO>;");
            sCadena.Append("DataBase=<BASE>;");
            sCadena.Append("Uid=<USER>;");
            sCadena.Append("Pwd=<PASSWORD>;");
            sCadena.Replace("<SERVIDOR>", "127.0.0.1");
            sCadena.Replace("<PUERTO>", "3306");
            sCadena.Replace("<BASE>", "devtroce");
            sCadena.Replace("<USER>", "geekzero");
            sCadena.Replace("<PASSWORD>", "********");
 
            return Convert.ToString(sCadena);
        } // end CrearConexion()
 
        private static string CrearCadena(string Servidor, string Puerto, string Base, string Usuario, string Password)
        {
            //String para cadena de conexion
            StringBuilder sCadena = new StringBuilder("");
 
            sCadena.Append("Server=<SERVIDOR>;");
            sCadena.Append("Port=<PUERTO>;");
            sCadena.Append("DataBase=<BASE>;");
            sCadena.Append("Uid=<USER>;");
            sCadena.Append("Pwd=<PASSWORD>;");
            sCadena.Replace("<SERVIDOR>", Servidor);
            sCadena.Replace("<PUERTO>", Puerto);
            sCadena.Replace("<BASE>", Base);
            sCadena.Replace("<USER>", Usuario);
            sCadena.Replace("<PASSWORD>", Password);
 
            return Convert.ToString(sCadena);
        } // end CrearCadena(5)
 
        public static MySql.Data.MySqlClient.MySqlConnection Conexion()
        {
            // objeto de conexion
            if (connMY.State != System.Data.ConnectionState.Open)
                connMY.ConnectionString = CrearCadena();
            return connMY;
        } // end Conexion()
 
        public static MySql.Data.MySqlClient.MySqlConnection Conexion(string Servidor, string Puerto, string Base, string Usuario, string Password)
        {
            // objeto de conexion
            if (connMY.State != System.Data.ConnectionState.Open)
                connMY.ConnectionString = CrearCadena(Servidor, Puerto, Base, Usuario, Password);
            return connMY;
        } // end Conexion()
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public static void InvocarSP (int pValor1, Int16 pValor2, Byte[] pValor3)
{
	using (MySqlCommand cmd = new MySqlCommand())
	{
		try
		{
			// setear parametros del command
			cmd.CommandType = CommandType.StoredProcedure;
			cmd.Connection = Conexion.MySQL.Conexion();
			cmd.CommandText = "NOMBRE_DEL_STORED_PROCEDURE";
 
			//asignar paramentros
			cmd.Parameters.AddWithValue("param1", pValor1);
			cmd.Parameters.AddWithValue("param2", pValor2);
			cmd.Parameters.AddWithValue("param3", pValor3);
 
			//abrir la conexion
			Conexion.MySQL.Conexion().Open();
 
			//ejecutar el query
			cmd.ExecuteNonQuery();
		}
		catch (Exception ex)
		{
			throw ex;
		}
		finally
		{
			Conexion.MySQL.Conexion().Close();
		} // end try
	} // end using
} // end GuardarHuella

Comentarios desde Facebook:

  1. avatar
    Henry Wong PERU Google Chrome Windows
    24 febrero 2011 at 10:28 #

    Si desean puede ver un ejemplo de como realizar un mini sistema de ventas con c# y Procedimientos almacenados con
    reportes en crystal report en los siguientes link

    Creando la Base de Datos
    http://hwongu.blogspot.com/2011/02/c-aplicacion-de-escritorio-sistemas-de.html
    Creando la capa de datos
    http://hwongu.blogspot.com/2011/02/c-aplicacion-de-escritorio-sistemas-de_22.html
    Creando la capa de negocios
    http://hwongu.blogspot.com/2011/02/c-aplicacion-de-escritorio-sistemas-de_5596.html
    Creando la capa de presentacion
    http://hwongu.blogspot.com/2011/02/c-aplicacion-de-escritorio-sistemas-de_23.html
    Creando los reportes en crystal report
    http://hwongu.blogspot.com/2011/02/c-aplicacion-de-escritorio-sistemas-de_5944.html

    Saludos

  2. avatar
    GeekZero PARAGUAY Google Chrome Windows
    8 noviembre 2010 at 13:51 #

    Esto sirve para invocar un SP de 3 parametros INPUT, si tienes mas agregas una linea mas y listo, si tienes menos los omites:

    1
    
    cmd.Parameters.AddWithValue("param4", pValor4);
  3. avatar
    Fello PANAMA Internet Explorer Windows
    8 noviembre 2010 at 13:24 #

    No me queda claro si este código para invocar procedimientos es genérico, ya que veo 3 parámetros fijos, que pasa si son mas o si son mas de 3?

Responder