Perdon pero no entraba el titulo, este es el titulo ¿Sabes usar parámetros en procedimientos almacenados con .NET y MySQL?

Ok, sigamos, primero que nada un aviso:

>-- Si queres saber todo sobre programacion, software, sistemas operativos. Sewguime. ¡No lo dudes!

Continuamos con el post:

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) hasta como usar procedimientos almacenados pasándo parámetros. Para ello uso programación en Visual Basic .NET 2010, las librerías de MySQLConnector (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:


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



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:

MySql.Data.MySqlClient (de la libreria MySQLConnector)

Eso es todo, saludos!

Fuente: elguille.info