Hemos visto que podemos formar un comando SQL para enviarlo a SQL Server generando un String concatenando los datos que ingresa el operador por teclado:
Dim descri As String = TextBox1.Text Dim precio As String = TextBox2.Text Dim cadena As String = "insert into articulos(descripcion,precio) values ('" & descri & "'," & precio & ")"
Esta metodología tiene el inconveniente cuando hay que elaborar comandos SQL con muchos campos (imaginemos que tenemos que elaborar un insert con una tabla que tiene más de 10 campos)
Para solventar esta dificultad se introduce el concepto de parámetros dentro del comando SQL.
Implementar una interfaz visual para el alta de registros en la tabla artículos utilizando parámetros en el comando insert.
Crearemos un proyecto llamado "BaseDeDatos7" con la siguiente interfaz visual:
El código fuente de la aplicación para efectuar altas es:
Imports System.Data.SqlClient Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim conexion As SqlConnection conexion = New SqlConnection("server=DIEGO-PC ; database=base1 ; integrated security = true") conexion.Open() Dim cadena As String = "insert into articulos(descripcion,precio) values (@descripcion,@precio)" Dim comando As SqlCommand comando = New SqlCommand(cadena, conexion) comando.Parameters.Add("@descripcion", SqlDbType.VarChar) comando.Parameters.Add("@precio", SqlDbType.Float) comando.Parameters("@descripcion").Value = TextBox1.Text comando.Parameters("@precio").Value = TextBox2.Text comando.ExecuteNonQuery() MessageBox.Show("Los datos se guardaron correctamente") TextBox1.Text = "" TextBox2.Text = "" conexion.Close() End Sub End Class
Para trabajar con parámetros dentro de comandos SQL debemos disponer el caracter @ y un nombre en los lugares donde se sustituye en tiempo de ejecución con el dato que carga el operador.
En nuestro ejemplo debemos parametrizar la descripción y el precio del artículo:
Dim cadena As String = "insert into articulos(descripcion,precio) values (@descripcion,@precio)"
Es importante notar que no disponemos las camillas simple cuando un parámetro es de tipo varchar. Solo indicamos nombres de parámetros y no tipo de parámetros.
Luego si debemos llamar al método Add de la propiedad Parameters del objeto de la clase SqlCommand indicando cada parámetro y de que tipo se trata (con esto la clase SqlCommand conocerá si tiene que disponer las comillas simples o no):
comando.Parameters.Add("@descripcion", SqlDbType.VarChar) comando.Parameters.Add("@precio", SqlDbType.Float)
Luego que creamos los dos parámetros debemos inicializar sus valores mediante la propiedad Parameters y accediendo como subíndice al nombre de parámetro respectivo:
comando.Parameters("@descripcion").Value = TextBox1.Text comando.Parameters("@precio").Value = TextBox2.Text
Finalmente llamamos al método ExecuteNonQuery para enviar al Sql Server el comando Sql respectivo (previamente el objeto comando de la clase SqlCommand se encarga de sustituir los parámetros por los valores asignados y según el tipo de dato del parámetros añadir las comillas simples)
Implementar la consulta de un artículo ingresando por teclado el código y recuperando la descripción y el precio. Definir un parámetro para la consulta
Crear un proyecto llamado: BaseDeDatos8 y definir la siguiente interfaz visual:
5 objeto de la clase Label. 1 objeto de la clase Button. 1 objeto de la clase TextBox.
En el evento Click procedemos a buscar el código del artículo ingresado en el TextBox. El código fuente es:
Imports System.Data.SqlClient Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim conexion As SqlConnection conexion = New SqlConnection("server=DIEGO-PC ; database=base1 ; integrated security = true") conexion.Open() Dim cadena As String = "select descripcion, precio from articulos where codigo=@codigo" Dim comando As SqlCommand comando = New SqlCommand(cadena, conexion) comando.Parameters.Add("@codigo", SqlDbType.Int) comando.Parameters("@codigo").Value = TextBox1.Text Dim registro As SqlDataReader registro = comando.ExecuteReader() Label4.Text = "" Label5.Text = "" If registro.Read() = True Then Label4.Text = registro("descripcion") Label5.Text = registro("precio") Else MessageBox.Show("No existe un artículo con el código ingresado") End If conexion.Close() End Sub End Class
Definimos el String con el comando select insertando un parámetro llamado @codigo:
Dim cadena As String = "select descripcion, precio from articulos where codigo=@codigo"
Creamos e inicializamos el parámetro @codigo:
comando.Parameters.Add("@codigo", SqlDbType.Int) comando.Parameters("@codigo").Value = TextBox1.Text
El resto de la aplicación no cambia con respecto a lo que vimos en conceptos anteriores.
Implementar una aplicación que permita consultar un artículo por su código. Luego de mostrarlo activar un botón para poder eliminarlo. Definir parámetros tanto para la consulta como para el borrado.
Crear un proyecto llamado: PruebaBaseDatos9 y definir la siguiente interfaz visual:
5 objeto de la clase Label. 2 objeto de la clase Button (disponer la propiedad Enabled del botón de borrado en false para que empiece desactivo) 1 objeto de la clase TextBox.
El código fuente para resolver la consulta y borrado es:
Imports System.Data.SqlClient Public Class Form1 Private conexion As New SqlConnection("server=DIEGO-PC ; database=base1 ; integrated security = true") Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click conexion.Open() Dim cadena As String = "select descripcion, precio from articulos where codigo=@codigo" Dim comando As SqlCommand comando = New SqlCommand(cadena, conexion) comando.Parameters.Add("@codigo", SqlDbType.Int) comando.Parameters("@codigo").Value = TextBox1.Text Dim registro As SqlDataReader registro = comando.ExecuteReader() If registro.Read() = True Then Label4.Text = registro("descripcion") Label5.Text = registro("precio") Button2.Enabled = True Else MessageBox.Show("No existe un artículo con el código ingresado") End If conexion.Close() End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click conexion.Open() Dim cadena As String = "delete from articulos where codigo=@codigo" Dim comando As SqlCommand comando = New SqlCommand(cadena, conexion) comando.Parameters.Add("@codigo", SqlDbType.Int) comando.Parameters("@codigo").Value = TextBox1.Text Dim cant As Integer cant = comando.ExecuteNonQuery() If cant = 1 Then Label4.Text = "" Label5.Text = "" MessageBox.Show("Se borró el artículo") Else MessageBox.Show("No existe un artículo con el código ingresado") End If conexion.Close() Button2.Enabled = False End Sub End Class
Implementar una aplicación que permita consultar un artículo por su código. Luego mostrar en dos TextBox la descripción y el precio actual. Permitir modificar la descripción y precio dejando registrado dicho cambio en la tabla de la base de datos al presionar un botón. Utilizar parámetros en los comandos SQL en la consulta y borrado
Crear un proyecto llamado: BaseDeDatos10 y definir la siguiente interfaz visual:
3 objeto de la clase Label. 2 objeto de la clase Button (disponer la propiedad Enabled del botón de modificación en false para que empiece desactivo) 3 objeto de la clase TextBox.
El código fuente para resolver la consulta y modificación es:
Imports System.Data.SqlClient Public Class Form1 Private conexion As New SqlConnection("server=DIEGO-PC ; database=base1 ; integrated security = true") Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click conexion.Open() Dim cadena As String = "select descripcion, precio from articulos where codigo=@codigo" Dim comando As SqlCommand comando = New SqlCommand(cadena, conexion) comando.Parameters.Add("@codigo", SqlDbType.Int) comando.Parameters("@codigo").Value = TextBox1.Text Dim registro As SqlDataReader registro = comando.ExecuteReader() If registro.Read() = True Then TextBox2.Text = registro("descripcion") TextBox3.Text = registro("precio") Button2.Enabled = True Else MessageBox.Show("No existe un artículo con el código ingresado") End If conexion.Close() End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click conexion.Open() Dim cadena As String = "update articulos set descripcion=@descripcion, precio=@precio where codigo=@codigo" Dim comando As SqlCommand comando = New SqlCommand(cadena, conexion) comando.Parameters.Add("@codigo", SqlDbType.Int) comando.Parameters("@codigo").Value = TextBox1.Text comando.Parameters.Add("@descripcion", SqlDbType.VarChar) comando.Parameters("@descripcion").Value = TextBox2.Text comando.Parameters.Add("@precio", SqlDbType.Float) comando.Parameters("@precio").Value = TextBox3.Text Dim cant As Integer cant = comando.ExecuteNonQuery() If cant = 1 Then MessageBox.Show("Se modificaron los datos del artículo") TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" Else MessageBox.Show("No existe un artículo con el código ingresado") End If conexion.Close() Button2.Enabled = False End Sub End Class