Escolar Documentos
Profissional Documentos
Cultura Documentos
Pgina 1
Pgina 2
'Para este caso se hace un pedido al Servidor de SQL Server un procedimiento almacenado, previa 'conexion abierta al servidor (cn) Dim cmd As New SqlCommand("usp_BusClienteporCiudad", cn) 'Se le indica en el tipo de comando que va a ejecutar : 'Existe tres tipos de comandos: 'CommandType.StoredProcedure => ejecuta procedimientos almacenados 'CommandType.Text => ejecuta sentencias transact-sql (predeterminado) 'CommandType.TableDirect => ejecuta una tabla directamente ejemplo: Clientes cmd.CommandType = CommandType.StoredProcedure 'Se define el parametro y su tipo de dato SqlDbType.TipoDato con su longitud 'Add(Nombre del parametro del Procedimiento almacenado, Tipo de dato).Value (valor recibido) cmd.Parameters.Add("@ciudad", SqlDbType.VarChar, 30).Value = ComboBox1.Text 'El comando(Command) con su parametro ser ejecutado con el Adaptador de Datos en el Servidor de SQL Server Dim da As New SqlDataAdapter(cmd) 'Creamos la tabla en memoria Dim tbl As New DataTable 'Copiamos el resultado en la tabla en memoria y el adaptador de datos se desconecta del servidor da.Fill(tbl) 'Los datos en memoria se enlazara como fuente de datos(DataSource) al DataGridView DataGridView1.DataSource = tbl 'Mostrando la cantidad de registros de la tabla en memoria lblNRegistros.Text = tbl.Rows.Count 'Redimensionando las columnas del datagridview DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells) End Sub End Class
Pgina 3
Pgina 4
Procedimientos almacenados para la aplicacion Create proc usp_CiudadDestino As Select Distinct CiudadDestinatario From Pedidos Go Create proc usp_PedidosporCiudadDestino @Ciudad varchar(40) As Select d.IdPedido,Sum(PrecioUnidad*Cantidad) as Total From Pedidos P, [Detalles de Pedidos] d Where P.IdPedido=d.IdPedido and CiudadDestinatario=@Ciudad Group by d.IdPedido Go Exec usp_PedidosporCiudadDestino 'Barcelona' Create proc usp_Tablas As Select IdProducto,NombreProducto From Productos Select IdProveedor,NombreCompaia From Proveedores Select IdCategoria,NombreCategoria From Categorias Go
End While 'una vez leido el resultado se cierra la conexion al servidor de SQL Server cn.Close() 'En conclusion las aplicaciones conectadas se caracterizan por que su lectura de datos se realiza con una ' conexion abierta al servidor. End Sub Private Sub ListBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.Click Try 'Cuando se realiza una llamada a un procedimiento almacenado con un parametro,haciendo uso 'su lectura mediante el DataReader se aconseja utilizar el controlador de Errores Try Catch 'Try ' verifica errores en codigo 'Catch ex as Exception SqlException(si se utiliza el proveedor SQLCLIENT) ' muestra el error ocurrido 'finally ' se establece un codigo de finalizacion, este bloque de codigo se ' ejecuta exista no error. 'end try Dim cmd As New SqlCommand("usp_PedidosporCiudadDestino", cn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add("@Ciudad", SqlDbType.VarChar, 40).Value = ListBox1.Text cn.Open() Dim dr As SqlDataReader = cmd.ExecuteReader 'Limpiamos el resultado anterior del ListBox2 mostrado ListBox2.Items.Clear() 'Creamos una variable tipo double para sumar el total de cada pedido Dim totalgeneral As Double = 0 While dr.Read 'Lectura de cada campo de la tabla, recuerden que puede ser por nombre de campo o indice. ListBox2.Items.Add(dr("IdPedido") & Space(3) & dr("Total").ToString) 'a medida que recorre el While, se va incrementando el total recuperado totalgeneral += CDbl(dr("Total")) End While lblNPedidos.Text = ListBox2.Items.Count lblTotal.Text = totalgeneral.ToString("c") ' c => mostrando el total en formato de moneda actual Catch ex As Exception 'recuperando el mensaje de error, en caso ocurra un error. MessageBox.Show("Error en codigo:" & ex.Message) Finally 'existe no exista error, cerramos conexion al servidor, con esto evitamos 'que si en caso ocurra un error, la conexion al servidor no quede abierta. Lenguaje de Programacin II (Profesor: Carlos Garca Vergara) Pgina 6
cn.Close() End Try End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Llamamos al procedimiento almacenado que contiene como resultado varias tablas Dim cmd As New SqlCommand("usp_Tablas", cn) cmd.CommandType = CommandType.StoredProcedure cn.Open() 'abriendo conexion al servidor Dim dr As SqlDataReader = cmd.ExecuteReader 'iniciando lectura al SqlDataReader con la primera tabla Productos While dr.Read 'lectura de las columnas de la tabla por indice, dando dos espacios por resultado ListBox3.Items.Add(dr(0) & Space(2) & dr(1)) End While 'le indicamos al SqlDataReader, la siguiente lectura de la tabla(NextResult) 'que seria la tabla Proveedores dr.NextResult() While dr.Read ListBox4.Items.Add(dr(0) & Space(2) & dr(1)) End While 'le indicamos al SqlDataReader, la siguiente lectura de la tabla(NextResult) 'que seria la tabla Categorias dr.NextResult() While dr.Read ListBox5.Items.Add(dr(0) & Space(2) & dr(1)) End While 'finalizada la lectura de la tablas en un procedimiento almanacenado 'cerramos conexion al servidor. cn.Close() End Sub End Class
Pgina 7
Procedimientos almacenados de la aplicacin Create proc usp_Proveedores As Select IdProveedor,NombreCompaia From Proveedores Go Create proc usp_ProdporProveedor @idproveedor int As Select IdProducto,NombreProducto From Productos Where IdProveedor=@idproveedor Go Exec usp_ProdporProveedor 1 Create proc usp_PedidosdondesevendioelProducto @idProducto int As Select d.IdPedido,FechaPedido,Cargo,Sum(PrecioUnidad*Cantidad) as Total From Pedidos P,[Detalles de Pedidos] d Where P.IdPedido=d.IdPedido and IdProducto=@idProducto Group by d.IdPedido,FechaPedido,Cargo Go EXEC usp_PedidosdondesevendioelProducto 1 Lenguaje de Programacin II (Profesor: Carlos Garca Vergara) Pgina 8
Pgina 9
Dim cmd As New SqlCommand("usp_ProdporProveedor", cn) cmd.CommandType = CommandType.StoredProcedure 'Establecemos como valor del parametro, el codigo del proveedor seleccionado. 'SelectedValue solo se utiliza cuando se ha establecido un campo en la propiedad 'ValueMember. 'Ejemplo: 'ComboBox1.ValueMember="IdProveedor", recuperamos el codigo establecido con ' ComboBox1.SelectedValue. cmd.Parameters.Add("@idproveedor", SqlDbType.Int).Value = ComboBox1.SelectedValue Dim da As New SqlDataAdapter(cmd) Dim tbl As New DataTable da.Fill(tbl) 'Igual tambien enlazamos la tabla en memoria y los campo en sus respectivas propiedades. ListBox1.DataSource = tbl ListBox1.DisplayMember = "NombreProducto" ListBox1.ValueMember = "IdProducto" Catch ex As Exception End Try End Sub Private Sub ListBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.Click Try 'Nota: Cuando se utiliza un ListBox y enlaza una tabla y campos como datos, es recomendable 'utilizar la propiedad Click no selectedindexchanged,porque si no tendria que utilizar 'un try..catch sin mensaje de error. Dim cmd As New SqlCommand("usp_PedidosdondesevendioelProducto", cn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add("@idProducto", SqlDbType.Int).Value = ListBox1.SelectedValue Dim da As New SqlDataAdapter(cmd) Dim tbl As New DataTable da.Fill(tbl) 'Aqui enlazamos los datos de la tabla en memoria al datagridview DataGridView1.DataSource = tbl 'iif(condicion, verdadero, falso) <-- condicional en linea 'IsDbNull(campo) <-- evalua si el campo es nulo, si fuera nulo es verdadero si no sera falso. 'El metodo compute se utiliza para realizar una funcion en la columna,la funcion puede ser 'sum(campo),avg(campo), min(campo),max(campo). 'Y la condicion se establece cuando la funcion a realizar en el campo puede ser mediante un criterio 'por ejemplo: tbl.Compute("Sum(Total)","Total>1500) <-- le indicamos que sume el campo total de la tabla 'en memoria, pero la suma lo hara en base al criterio de que si el total es mayor a 1500. Lenguaje de Programacin II (Profesor: Carlos Garca Vergara) Pgina 10
'si no establecemos un criterio,y lo dejamos vacio,se asume que sumara todo el campo Total. 'tbl.Compute("funcion(campo)",criterio de computo de campo) 'Aqui le preguntamos si en el caso la suma del campo total es nula, entonces se establece como valor 0, 'si no mostramos la suma completa. lblTotalVenta.Text = IIf(IsDBNull(tbl.Compute("sum(total)", "")), 0, tbl.Compute("sum(total)", "")) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub End Class
Pgina 11