Вы находитесь на странице: 1из 12

Entorno Conectado ExecuteNonQ uery y ExecuteScalar -

Programacin Web

Mantenimient o de una Tabla

Prof. Carlos David Castilla Quiroz Correo: davidcastillaq@hotmail.com

El Entorno Conectado
Durante mucho tiempo las aplicaciones que requerian el empleo de datos lo hacian a traves de un entorno conectado de datos, lo cual significa que un usuario y/o aplicacion esta conectado al origen de datos constantemente. Un escenario conectado ofrece como beneficio: Un entorno seguro de facil mantenimiento. Se puede controlar facilmente la concurrencia.

Pero a su vez este modo de trabajo nos puede presentar algunas desventajas: Requiere de una conexion de Red Permanente. Afecta la escabilidad de la aplicacin.

Prof. Carlos David Castilla Quiroz

Pgina 2

Programacin Web

Accediendo a Entornos Conectados


En escenarios conectados los recursos estn disponibles hasta cerrar la conexin. a) Abrir Conexin b) Ejecutar el Comando c) Procesar las Filas de un Reader d) Cerrar el Reader e) Cerrar la Conexion

Instruccin Execute NonQuery


Esto es lo que nos dice la ayuda de Visual Studio sobre el mtodo ExecuteNonQuery: Ejecuta una instruccin SQL en un objeto de conexin. Se puede utilizar ExecuteNonQuery para realizar operaciones de catlogo (por ejemplo, consultar la estructura de una base de datos o crear objetos de base de datos como tablas) o para cambiar la informacin de una base de datos ejecutando las instrucciones UPDATE, INSERT o DELETE. Aunque ExecuteNonQuery no devuelva ninguna fila, los parmetros de salida o los valores devueltos asignados a los parmetros se rellenan con datos.

Prof. Carlos David Castilla Quiroz

Pgina 3

Programacin Web
Para las instrucciones UPDATE, INSERT y DELETE, el valor devuelto corresponde al nmero de filas afectadas por el comando. Para los dems tipos de instrucciones, el valor devuelto es -1.

Abrir y Cerrar una Conexin Ejecutando el SQLCommand


1.- Crearemos el siguiente procedimiento almacenado: CREATE PROCEDURE CrearTablaContactos AS Create table Contactos ( CodContacto int identity(1,1), CodEmpleado int not null, Fecha Datetime ) RETURN 2.- Luego en nuestro formulario insertaremos un Button y quedar de la siguiente manera.

3.- Luego hacemos la conexin va script. Imports System.Data.SqlClient Public Class Form1 Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=True") 4.- Luego en el Button codificamos lo siguiente. Private Sub Button1_Click 'Lo codificamos dentro de un try Catch para que se maneje un error que 'se pueda cometer, asi tal vez si la tabla ya existe, que me mande un mensaje Try
Prof. Carlos David Castilla Quiroz Pgina 4

Programacin Web
Dim comando As New SqlCommand("CrearTablaContactos", cn) comando.CommandType = CommandType.StoredProcedure 'Abre la conexion cn.Open() 'ejecuta el SQLCommand comando.ExecuteNonQuery() 'Muestra mensaje despues de Crear la Tabla MsgBox("Tabla Contactos Creada Satisfactoriamente", MsgBoxStyle.Information, "Mensaje") Catch ex As Exception 'Si la Tabla ya existe que me mande un mensaje MsgBox("La Tabla Contactos ya Existe", MsgBoxStyle.Information, "Mensaje") Finally 'Cierra la conexin cn.Close() End Try End Sub 5.- Luego ejecutamos y al dar clic sobre el button se debe mostrar el siguiente mensaje

6.- Si volvemos a dar clic nos debe mostrar el siguiente mensaje.

Insertar Registros a una Tabla


1.- Crear el Siguiente procedimiento almacenado. CREATE PROCEDURE InsertarProducto
Prof. Carlos David Castilla Quiroz Pgina 5

Programacin Web
@descripcion varchar(40), @categoria int, @proveedor int AS Insert into Products(Productname, Categoryid,SupplierID) values(@descripcion,@categoria,@Proveedor) RETURN @@identity 2.- Hacemos el siguiente diseo en el formulario.

TxtProducto

btnAgreg ar btnLimpia r

3.- Hacemos la Conexin. System.Data.SqlClient Public Class Form2

TxtProveed or

TxtCategor ia

Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=True") 4.- Luego en el botn btnAgregar, codificamos lo siguiente: Private Sub btnagregar_Click Try Dim comando As New SqlCommand("InsertarProducto", cn) comando.CommandType = CommandType.StoredProcedure comando.Parameters.Add("@descripcion", Me.txtproducto.Text comando.Parameters.Add("@categoria", SqlDbType.Int).Value = Val(Me.txtcategoria.Text) SqlDbType.NVarChar, 40).Value =

Prof. Carlos David Castilla Quiroz

Pgina 6

Programacin Web
comando.Parameters.Add("@proveedor", SqlDbType.Int).Value = Val(Me.txtproveedor.Text) 'Asi definimos un parmetro de retorno Dim prm1 As New SqlParameter("@return_value", SqlDbType.Int) prm1.Direction = ParameterDirection.ReturnValue comando.Parameters.Add(prm1) 'Abrir la Conexin cn.Open() 'Ejecuta el SQLCommand comando.ExecuteNonQuery() 'Mensaje de Producto Insertado MsgBox("Se ha Insertado un Producto con Cdigo " & prm1.Value) Catch ex As Exception MsgBox(ex.Message) Finally cn.Close() End Try End Sub 5.- Luego en botn btnlimpiar, codificamos: Private Sub btnlimpiar_Click Me.txtcategoria.Clear() Me.txtproducto.Clear() Me.txtproveedor.Clear() End Sub

Instruccin ExecuteScalar:
Ejecuta la consulta y devuelve la primera columna de la primera fila del conjunto de resultados que devuelve la consulta. Se omiten todas las dems columnas y filas. Utilice el mtodo ExecuteScalar para recuperar un nico valor (por ejemplo, un valor agregado) de una base de datos. Por tanto, podemos deducir que ExecuteNonQuery lo usaremos para ejecutar la mayora de las instrucciones de SQL que ejecutar algo en la base de datos, pero que no
Prof. Carlos David Castilla Quiroz Pgina 7

Programacin Web
devolver un valor. Bueno, en realidad, en algunos casos si que devolver un valor, pero ser para indicarnos, por ejemplo, si eliminamos varias filas de la tabla, devolver el nmero de filas eliminadas. Por otro lado, ExecuteScalar lo usaremos cuando tengamos que ejecutar un cdigo de SQL del que queremos recuperar la primera columna de la primera fila. Este mtodo devuelve un valor de tipo Object que tendremos que convertir segn el valor devuelto. Por ejemplo, si queremos saber el nmero de registros (filas) de una tabla que cumple cierto criterio, podemos usar un comando SQL como este: SELECT Count(*) FROM Prueba WHERE FechaAlta >= @Param1 En este caso, el valor devuelto ser del tipo Int32 y ser el nmero de filas que hay en la tabla Prueba de la base de datos indicada en el objeto Connection que previamente habremos abierto que tenga una fecha igual o superior a la indicada en el parmetro proporcionado a ese comando. Si no hay ninguna fila que cumpla ese criterio, devolver cero. Nota: Instrucciones de SQL no significa que hay que usarlo con SQL Server, sino que son instrucciones en "lenguaje" SQL, que en SQL Server se conoce como T-SQL o Transact SQL, y que por tanto podemos usar con cualquier tipo de base de datos, (o casi).

Ejercicio Prctico N1

Txtpr o

BtnProduct os BtnEmplea dos

Txte mp

Prof. Carlos David Castilla Quiroz

Pgina 8

Programacin Web
Imports System.Data Imports System.Data.SqlClient Dim cn As New SqlConnection("Server=(local); Database=Northwind; Integrated Security=True") Private Sub Btnproductos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cmd As New SqlCommand("Select count(*) from products", cn) cn.Open() Dim x As Integer x = cmd.ExecuteScalar Me.txtpro.Text = x.ToString cn.Close() End Sub Private Sub BtnEmpleados_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim cmd As New SqlCommand("Select count(*) from employees", cn) cn.Open() Dim y As Integer y = cmd.ExecuteScalar Me.txtemp.Text = y.ToString cn.Close() End Sub

TxtE 1.-mp Disear el siguiente Formulario. TxtTel

Mantenimiento de TxtC la Tabla Shippers od (Empresa)

BtnNue vo BtnGuar dar BtnModifi car BtnElimi nar

DgvEmpr esa Prof. Carlos David Castilla Quiroz Pgina 9

Programacin Web

2.- Luego Codificaremos lo siguiente: Imports System.Data Imports System.Data.SqlClient Public Class Form1 Dim cn As New SqlConnection("Server=(Local); DataBase=Northwind; Integrated Security=SSPI") Sub filtrar() Dim da As New SqlDataAdapter("Select * from Shippers", cn) Dim dt As New DataTable da.Fill(dt) Me.DgvEmpresa.DataSource = dt End Sub

Private Sub Form1_Load filtrar() End Sub Private Sub BtnGuardar_Click Try Dim cmd As New SqlCommand("Insert Into Shippers Values(@empresa,@telefono)", cn) cmd.Parameters.Add("@empresa", SqlDbType.VarChar, 40).Value = Me.txtemp.Text cmd.Parameters.Add("@telefono", SqlDbType.VarChar, 9).Value = Me.txtTel.Text cn.Open()

Prof. Carlos David Castilla Quiroz

Pgina 10

Programacin Web
cmd.ExecuteNonQuery() MsgBox("Empresa Registrada...!", MsgBoxStyle.Information, "SISE") filtrar() Catch ex As Exception MsgBox(ex.Message) Finally cn.Close() End Try Dim x As Integer Dim cmd1 As New SqlCommand("Select max(shipperid) from Shippers", cn) cn.Open() x = cmd1.ExecuteScalar Me.txtcod.Text = x.ToString cn.Close() End Sub Private Sub BtnActualizar_Click Try Dim cmd As New SqlCommand("Update Shippers Set CompanyName=@empresa,Phone=@telefono where Shipperid=@codigo", cn) cmd.Parameters.Add("@empresa", SqlDbType.VarChar, 40).Value = Me.txtemp.Text cmd.Parameters.Add("@telefono", SqlDbType.VarChar, 9).Value = Me.txtTel.Text cmd.Parameters.Add("@codigo", SqlDbType.Int).Value = CInt(Me.txtcod.Text) cn.Open() cmd.ExecuteNonQuery() MsgBox("Datos Actualizados...!", MsgBoxStyle.Information, "SISE") filtrar() Catch ex As Exception MsgBox(ex.Message) Finally cn.Close() End Try End Sub Private Sub BtnEliminar_Click Try Dim cmd As New SqlCommand("Delete from Shippers where Shipperid=@codigo", cn) cmd.Parameters.Add("@codigo", SqlDbType.Int).Value = Me.txtcod.Text cn.Open() cmd.ExecuteNonQuery() MsgBox("Empresa Eliminada...!", MsgBoxStyle.Information, "SISE") filtrar() Catch ex As Exception MsgBox(ex.Message) Finally cn.Close()

Prof. Carlos David Castilla Quiroz

Pgina 11

Programacin Web
End Try End Sub Private Sub DgvEmpresa_DoubleClick If Not IsDBNull(Me.DgvEmpresa.SelectedCells(0).Value) Then Me.txtcod.Text = Me.DgvEmpresa.SelectedCells(0).Value Me.txtemp.Text = Me.DgvEmpresa.SelectedCells(1).Value Me.txtTel.Text = Me.DgvEmpresa.SelectedCells(2).Value End If End Sub Private Sub BtnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.txtcod.Clear() Me.txtemp.Clear() Me.txtTel.Clear() End Sub End Class

Prof. Carlos David Castilla Quiroz

Pgina 12

Вам также может понравиться