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 |








en
en
en
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
Esto sirve para invocar un SP de 3 parametros INPUT, si tienes mas agregas una linea mas y listo, si tienes menos los omites:
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?