Bienvenidos sean nuevamente a este sencillo blog de programación, a continuación les presento una forma de ejecutar consultas usando las funciones de agregado más comunes como COUNT (devuelve la cantidad de registros de una columna), SUM (devuelve la suma de los valores de una columna), MIN (obtiene el registro mínimo de una columna), MAX (obtiene el registro máximo de una columna) y AVG (devuelve el promedio de la columna) en SQL desde C#.
NOTA: La base de datos se realizó en SQL Server Management 2012 y la aplicación en Visual Studio 2012.
Código de la base de datos en SQL
--base
de datos de ejemplo
create database bdventas
go
--usamos
esta base de datos
use bdventas
go
--creamos
una tabla para los vendedores
create table vendedor
(
Id_Vendedor
int primary key identity(1,1) not null,
Nombre_Vendedor varchar(20) not null,
Apellidop_Vendedor varchar(20) not null,
Apellidom_Vendedor varchar(20) not null
)
--enseguida
una tabla para las ventas
create table ventas
(
Id_Venta
int primary key identity(1,1) not null,
Id_Vendedor int foreign key(Id_Vendedor) references vendedor(Id_Vendedor) not null,
Monto_Venta money not null,
Fecha_Venta date not null
)
--insertamos
tres vendedores
insert into vendedor values('Hugo','Arellano','Pérez'),
('Andrea','Villegas','Marín'),('Benito','Juárez','García')
--insertamos
tres ventas para cada vendedor
insert
into ventas values(1,100,'14-01-14'),(1,69,'16-01-14'),(1,500,'30-12-13'),
(2,150,'12-12-13'),(2,3000,'19-01-14'),(2,1010,'30-06-13'),
(3,90,'30-01-14'),(3,600,'25-01-14'),(3,2000,'30-09-13')
--estas
son las consultas para las funciones COUNT,SUM,MIN,MAX y AVG
select
COUNT(*) from ventas
select
SUM(Monto_Venta) from ventas
select MIN(Monto_Venta)from ventas
select MAX(Monto_Venta) from ventas
select AVG(Monto_Venta) from ventas
--se
pueden consultar todas juntas
select COUNT(*), SUM(Monto_Venta) , MIN(Monto_Venta), MAX(Monto_Venta) , AVG(Monto_Venta) from ventas
--o
consultarlas con un alias
select COUNT(*) as 'Total de ventas',sum(Monto_Venta) as 'Monto Total',MIN(Monto_Venta) as 'Monto Mínimo',
MAX(Monto_Venta) as 'Monto Máximo',AVG(Monto_Venta) as 'Promedio de ventas' from ventas
Código de la aplicación en C#
Creamos una nueva aplicación:
Agregamos a la forma un Label y un TextBox para cada función además de un botón para actualizar la información (en lugar de un botón podría ser un Timer que actualizara la información cada cierto intervalo de tiempo):
Probamos las consultas en SQL Server
Ahora en el evento Onclick del Button btn_actualizar agregamos el código para conectar con la base de datos y realizar las consultas:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//librería para manejo de SQL
using System.Data.SqlClient;
namespace minmaxcountavg
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//programamos el evento Click del botón btn_actualizar
private void
btn_actualizar_Click(object sender,
EventArgs e)
{
//cadena de conexión con la base de
datos dbventas
string cadena_conexion=@"Data
Source=HUGUITO;Initial Catalog=bdventas;Integrated Security=True";
//objeto de conexión
SqlConnection conexion = new SqlConnection();
//nuestro comando
SqlCommand comando = new SqlCommand();
//asignamos al objeto de conexión la
cadena
conexion.ConnectionString = cadena_conexion;
//indicamos al comando la conexión
comando.Connection = conexion;
//se abre la conexión
conexion.Open();
//asignamos al comando la consulta de
COUNT
comando.CommandText = "select
COUNT(*) from ventas";
//guardamos el resultado en el
TextBox txt_num_ventas
txt_num_ventas.Text=(comando.ExecuteScalar()).ToString();
//asignamos al comando la consulta de
SUM
comando.CommandText = "select
SUM(Monto_Venta) from ventas";
//guardamos el resultado en el
TextBox txt_monto_total
txt_monto_total.Text =
(comando.ExecuteScalar()).ToString();
//asignamos al comando la consulta de
MIN
comando.CommandText = "select MIN(Monto_Venta)
from ventas";
//guardamos el resultado en el
TextBox txt_monto_min
txt_monto_min.Text =
(comando.ExecuteScalar()).ToString();
//asignamos al comando la consulta de
MAX
comando.CommandText = "select
MAX(Monto_Venta) from ventas";
//guardamos el resultado en el
TextBox txt_monto_max
txt_monto_max.Text =
(comando.ExecuteScalar()).ToString();
//asignamos al comando la consulta de
AVG
comando.CommandText = "select
AVG(Monto_Venta) from ventas";
//guardamos el resultado en el
TextBox txt_promedio_ventas
txt_promedio_ventas.Text =
(comando.ExecuteScalar()).ToString();
//cerramos la conexión
conexion.Close();
}
}
}
Ejecutamos la aplicacion y como podemos observar en la imagen siguiente las consultas de SQL Server y de la aplicación de C# arrojan los mismos resultados:
Realizamos inserciones en la base de datos desde SQL Server y ejecutamos las consultas:
Damos clic al botón Actualizar de la aplicación y podemos observar el cambio en los registros:
Como podemos observar las cantidades que involucran a los campos de tipo Money arrojan en C# cuatro decimales por lo que usaremos substring para remover los dos últimos decimales:
Nota: SOLO removemos los decimales NO redondeamos, para dicha tarea pueden consultar las funciones ROUND y FLOOR.
Realizamos los siguientes cambios al código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//librería para manejo de SQL
using System.Data.SqlClient;
namespace minmaxcountavg
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//programamos el evento Click del botón btn_actualizar
private void
btn_actualizar_Click(object sender,
EventArgs e)
{
//cadena de conexión con la base de
datos dbventas
string cadena_conexion=@"Data
Source=HUGUITO;Initial Catalog=bdventas;Integrated Security=True";
//objeto de conexión
SqlConnection conexion = new SqlConnection();
//nuestro comando
SqlCommand comando = new SqlCommand();
//asignamos al objeto de conexión la
cadena
conexion.ConnectionString =
cadena_conexion;
//indicamos al comando la conexión
comando.Connection = conexion;
//se abre la conexión
conexion.Open();
//asignamos al comando la consulta de
COUNT
comando.CommandText = "select
COUNT(*) from ventas";
//guardamos el resultado en el
TextBox txt_num_ventas
txt_num_ventas.Text=(comando.ExecuteScalar()).ToString();
//asignamos al comando la consulta de
SUM
comando.CommandText = "select
SUM(Monto_Venta) from ventas";
//guardamos el resultado en la
variable de tipo cadena sum_ventas
string sum_ventas =
(comando.ExecuteScalar()).ToString();
//asignamos al comando la consulta de
MIN
comando.CommandText = "select MIN(Monto_Venta)
from ventas";
//guardamos el resultado en la
variable de tipo cadena min_ventas
string min_ventas = (comando.ExecuteScalar()).ToString();
//asignamos al comando la consulta de
MAX
comando.CommandText = "select
MAX(Monto_Venta) from ventas";
//guardamos el resultado en la
variable de tipo cadena max_ventas
string max_ventas =
(comando.ExecuteScalar()).ToString();
//asignamos al comando la consulta de
AVG
comando.CommandText = "select
AVG(Monto_Venta) from ventas";
//guardamos el resultado en la
variable de tipo cadena avg_ventas
string avg_ventas
=(comando.ExecuteScalar()).ToString();
//cerramos la conexión
conexion.Close();
/*ahora mostramos en los TextBox las
cantidades, pero, removemos
caracteres para mostrar sólo dos
decimales, esto con substring
que inicie desde la posoción 0
(inicio de la cadena) hasta la
posición final (usamos la función
Length para determinar el tamaño de la cadena)
menos dos caracteres, esto ya que
aunque sean cantidades enteras
o incluso un valor de cero en el
TextBox se muestran cuatro decimales*/
txt_monto_max.Text =
max_ventas.Substring(0,(max_ventas.Length-2));
txt_monto_min.Text =
min_ventas.Substring(0, (min_ventas.Length - 2));
txt_monto_total.Text=sum_ventas.Substring(0,(sum_ventas.Length-2));
txt_promedio_ventas.Text =
avg_ventas.Substring(0, (avg_ventas.Length - 2));
}
}
}
Finalmente comprobamos el resultado ejecutando la aplicación:
excelente es lo q necesitaba muy bien descrito
ResponderEliminarhola
ResponderEliminarpero si quiero mostrar texto que podria cambiar del codigo te agradeceria tu ayuda