Colabora
 

Uso de Parámetros en procedimientos almacenados con .NET y MySQL

Cómo usar procedimientos almacenados y sus parámetros usando MySQLConnector y .NET

 

Fecha: 18/Oct/2007 (11-oct-07)
Autor: Jesús Utrera Burgal - [email protected]

Colaborador de http://www.carlosutrera.com/blog/ (por si interesa)

 


Introducción

Después de intentos infructuosos, pedir ayuda y buscar información por aquí y por allá, conseguí algo a priori sencillo (siempre temo las cosas a priori sencillas): Usar parámetros con procedimientos almacenados bajo bases de datos MySQL. Como prometí, aquí pongo este trozo de conocimiento para todo aquel que necesite trabajar contra MySQL desde .NET. El código es muy fácil pasarlo a C# y otros asi que...

Aquí se puede ver desde cómo conectar con una base de datos MySQL (ya existe información por estos lares) hasta como usar procedimientos almacenados pasándo parámetros. Para ello uso programación en Visual Basic .NET 2003, las librerías de MySQLConnector 5.0 (http://www.mysql.com) y por supuesto MySQL.

 

Manos a la obra

Primero creamos un procedimiento almacenado en nuestra base de datos.

CREATE DEFINER=`root`@`localhost` PROCEDURE `mi_procedimiento`(IN mi_variable VARCHAR(15))
BEGIN
  declare variable1 VARCHAR(15);
  set variable1 = mi_variable;
  select * from MiTabla where Cod_Tabla like variable1;
END

pasamos la variable de entrada (de entrada: "IN", de salida: OUT, ambas: INOUT [o algo así ;-)]) mi_variable que es un texto.

Ahora toca usar el procedimiento almacenado en la base de datos desde nuestra aplicación en Visual Basic .NET ¿Cómo? sencillo (lo sencillo que se hace cuando ya lo sabes jejeje)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim conStr As String
  conStr = "server=localhost;user id=root;password=passwd;database=basedatos"
Dim con As New MySqlConnection(conStr)
  Try
    con.Open()
  Catch ex As Exception     'Código de captura de la excepción   End Try
  Dim comando As New MySqlCommand("mi_procedimiento", con)
  comando.CommandType = CommandType.StoredProcedure
  Dim fila As MySqlDataReader
  Dim p As New MySqlParameter("?mi_variable", MySql.Data.MySqlClient.MySqlDbType.VarChar)
  p.Value = "root"
  p.Direction = ParameterDirection.InputOutput
  comando.Parameters.Add(p)
  Try
    fila = comando.ExecuteReader
    While fila.Read
      MsgBox(fila(0).ToString)
    End While
    fila.Close()
  Catch ex As MySqlException
    'Código de captura de la excepción
  End Try
  con.Close()
End Sub

El primer bloque consiste en conectar con la base de datos, creo que en este punto no hace falta explicar como se conecta con la base de datos porque es idéntica a cualquier otra conexión con bases de datos diferentes. Ahora toca crear el comando que va a llamar al procedimiento almacenado:

Dim comando As New MySqlCommand("mi_procedimiento", con)
comando.CommandType = CommandType.StoredProcedure

sencillo, ¿no? declaramos el objeto MySQLCommand y le decimos (2ª lïnea) que se trata de un procedimiento almacenado.

Ahora toca lo interesante: pasarle el parámetro (con lo sencillo que se hacía en SQLServer).

Dim p As New MySqlParameter("?mi_variable", MySql.Data.MySqlClient.MySqlDbType.VarChar)
p.Value = "root"
p.Direction = ParameterDirection.InputOutput
comando.Parameters.Add(p)

Muy importante: dar la dirección del parámetro de entrada/salida (en mi caso, y teniendo en cuenta mis escasos dummie-conocimientos, era la única manera de que funcionara). El resto es como lo demás, declaras y creas el objeto parámetro (1ª línea), especificando el parámetro y su tipo, darle un valor (2ª línea), especificar la dirección (3ª línea) y añadirselo al comando (última línea) porque si no esto no vale "pa ná".

El último bloque es como el resto, en mi caso un datareader captura el resultado y lo proceso mostrando el valor del primer campo.

El código completo:

Primero, el procedimiento almacenado en MySQL:

CREATE DEFINER=`root`@`localhost` PROCEDURE `mi_procedimiento`(IN mi_variable VARCHAR(15))
BEGIN
  declare variable1 VARCHAR(15);
  set variable1 = mi_variable;
  select * from MiTabla where Cod_Tabla like variable1;
END

A continuación sigue código en Visual Basic .NET

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim conStr As String
  conStr = "server=localhost;user id=root;password=passwd;database=basedatos"
Dim con As New MySqlConnection(conStr)
  Try
    con.Open()
  Catch ex As Exception     'Código de captura de la excepción   End Try
  Dim comando As New MySqlCommand("mi_procedimiento", con)
  comando.CommandType = CommandType.StoredProcedure
  Dim fila As MySqlDataReader
  Dim p As New MySqlParameter("?mi_variable", MySql.Data.MySqlClient.MySqlDbType.VarChar)
  p.Value = "root"
  p.Direction = ParameterDirection.InputOutput
  comando.Parameters.Add(p)
  Try
    fila = comando.ExecuteReader
    While fila.Read
      MsgBox(fila(0).ToString)
    End While
    fila.Close()
  Catch ex As MySqlException
    'Código de captura de la excepción
  End Try
  con.Close()
End Sub

Eso es totototo totototodddo amigos. Espero que resulte muy útil para todo el mundo y nos ayude a crear amistad entre MySQL y .NET, que no todo fue un camino de rosas (hasta antes de MySQL Connector al menos). Y como decía un maestro: ahora, de ejercicio, hacerlo para C#, C++, etc. ;-)


Espacios de nombres usados en el código de este artículo:

MySql.Data.MySqlClient (de la libreria MySQLConnector)

 

Código de ejemplo (comprimido):

 

No hay, así de simple

 


Ir al índice principal de el Guille