Exportar DataSet a Excel desde C# .Net

Hace un par de días, un compañero me llamo a preguntarme si conocía como pasar o exportar los datos de una grilla (DatagridView) en .Net C# a un archivo Excel. Fue aquí, donde recordé que había hecho algo parecido hace algún tiempo. Este código por su necesidad en la mayoría de las aplicaciones (Exportar datos) puede llegar a ser muy útil y quiero que lo tengan con ustedes.

Empecemos explicando un poco la funcionalidad del ejemplo.

Los datos que voy a mostrar en la grilla vienen de un procedimiento almacenado, estos registros los almaceno en una variable publica de tipo DataSet, la cual se encarga de poblar o llenar la Grilla y finalmente exporta los datos ha Excel. Les muestro el código para ser un poco mas claro.



Declaramos de Variable Dataset
DataSet dsDatos = new DataSet();

Se llena la variable con la consulta que viene de base de datos y se muestran los datos en la Grilla.
SqlCommand cmd = new SqlCommand(sSql, connDB);
SqlDataAdapter DaRecDatos = new SqlDataAdapter(cmd);
DaRecDatos.Fill(dsDatos);
dataGridView1.DataSource = dsDatos;

Para exportar los datos llamo al Dataset (dsDatos) que previamente llenamos y se lo pasamos aun método llamado, para este ejemplo ExportarAexcel que se encargara de exportar los datos en la ruta que seleccionamos en el FileDialog, así:
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Excel Files (*.xls)|*.xls";// All Files (*.*)|*.*";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
	FileName = saveFileDialog.FileName;
	if (FileName.Trim() != "")
	{
		if (ExportarAexcel(dsDatos, FileName, ref sError))
		{
			return true;
		}                    
	}
}

Anexo método que exporta los datos:
public static bool ExportarAexcel(DataSet source, string fileName,ref string sErr)
{
	try
	{
		System.IO.StreamWriter excelDoc;

		excelDoc = new System.IO.StreamWriter(fileName);
		const string startExcelXML = "\r\n\r\n \r\n " +
		  "\r\n " +
		  "\r\n " +
		  "\r\n \r\n " +
		  "\r\n \r\n " +
		  "\r\n ";
		const string endExcelXML = "";

		int rowCount = 0;
		int sheetCount = 1;
	   
		excelDoc.Write(startExcelXML);
		excelDoc.Write("");
		excelDoc.Write("");
		excelDoc.Write("");
		for (int x = 0; x < source.Tables[0].Columns.Count; x++)
		{
			excelDoc.Write("");
			excelDoc.Write(source.Tables[0].Columns[x].ColumnName);
			excelDoc.Write("");
		}
		excelDoc.Write("");
		foreach (DataRow x in source.Tables[0].Rows)
		{
			rowCount++;
			//if the number of rows is > 64000 create a new page to continue output
			if (rowCount == 64000)
			{
				rowCount = 0;
				sheetCount++;
				excelDoc.Write("
"); excelDoc.Write("
"); excelDoc.Write(""); excelDoc.Write(""); } excelDoc.Write(""); //ID=" + rowCount + " for (int y = 0; y < source.Tables[0].Columns.Count; y++) { System.Type rowType; rowType = x[y].GetType(); switch (rowType.ToString()) { case "System.String": string XMLstring = x[y].ToString(); XMLstring = XMLstring.Trim(); XMLstring = XMLstring.Replace("&", "&"); XMLstring = XMLstring.Replace(">", ">"); XMLstring = XMLstring.Replace("<", "<"); excelDoc.Write("" + ""); excelDoc.Write(XMLstring); excelDoc.Write(""); break; case "System.DateTime": //Excel has a specific Date Format of YYYY-MM-DD followed by //the letter 'T' then hh:mm:sss.lll Example 2005-01-31T24:01:21.000 //The Following Code puts the date stored in XMLDate //to the format above DateTime XMLDate = (DateTime)x[y]; string XMLDatetoString = ""; //Excel Converted Date XMLDatetoString = XMLDate.Year.ToString() + "-" + (XMLDate.Month < 10 ? "0" + XMLDate.Month.ToString() : XMLDate.Month.ToString()) + "-" + (XMLDate.Day < 10 ? "0" + XMLDate.Day.ToString() : XMLDate.Day.ToString()) + "T" + (XMLDate.Hour < 10 ? "0" + XMLDate.Hour.ToString() : XMLDate.Hour.ToString()) + ":" + (XMLDate.Minute < 10 ? "0" + XMLDate.Minute.ToString() : XMLDate.Minute.ToString()) + ":" + (XMLDate.Second < 10 ? "0" + XMLDate.Second.ToString() : XMLDate.Second.ToString()) + ".000"; excelDoc.Write("" + ""); excelDoc.Write(XMLDatetoString); excelDoc.Write(""); break; case "System.Boolean": excelDoc.Write("" + ""); excelDoc.Write(x[y].ToString()); excelDoc.Write(""); break; case "System.Int16": case "System.Int32": case "System.Int64": case "System.Byte": excelDoc.Write("" + ""); excelDoc.Write(x[y].ToString()); excelDoc.Write(""); break; case "System.Decimal": case "System.Double": excelDoc.Write("" + ""); excelDoc.Write(x[y].ToString()); excelDoc.Write(""); break; case "System.DBNull": excelDoc.Write("" + ""); excelDoc.Write(""); excelDoc.Write(""); break; default: throw (new Exception(rowType.ToString() + " not handled.")); } } excelDoc.Write(""); } excelDoc.Write("
"); excelDoc.Write("
"); excelDoc.Write(endExcelXML); excelDoc.Close(); } catch (Exception ex) { sErr = ex.Message; return false; } return true; }

Si desean conocer como Exportar un DaTable a formato CSV no dejen de visitarlo es una funcionalidad que los puede sacar de apuros en cualquier proyecto.

"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""


Share:

Validar sólo números o Texto con JavaScript

En la mayoría de las veces, es necesario validar en una aplicación que caracteres introduce el usuario en un campo de texto, como por ejemplo: solo letras para la captura de Nombres y apellidos o solo números en diferentes navegadores para un teléfono o validar sólo números y letras.

Validar Textbox en C# para que acepte solo números, lo podemos lograr a través del siguiente código JavaScript, mostrado a continuación:

Validar sólo números
Esta función nos permite identificar a través de la propiedad event.keyCode la tecla digitada. Si el caracteres digitado no se encuentra dentro del rango de teclas numéricas (del 48 al 57) retorna falso (no permite escribir el caracter), como lo muestra el siguiente código:
//Función que permite solo Números
function ValidaSoloNumeros() {
 if ((event.keyCode < 48) || (event.keyCode > 57)) 
  event.returnValue = false;
}

Luego, para llamar la función en nuestra pagina web, solo basta con invocarlo en el evento onkeypress de la caja de texto así:

Validar sólo Texto o Letras

A diferencia del código anterior, éste nos permite digitar sólo texto, letras mayúsculas (del 65 al 90) y minúsculas (del 97 al 122) así:
function txNombres() {
 if ((event.keyCode != 32) && (event.keyCode < 65) || (event.keyCode > 90) && (event.keyCode < 97) || (event.keyCode > 122))
  event.returnValue = false;
}

Llamamos la función en el evento onkeypress de la caja de texto:


Si queremos que los códigos anteriores, no estén incluidos dentro de la pagina web, podemos crear un archivo .js llamado Validaciones.js, luego copiamos y pegamos el código anterior en este archivo, guardamos y finalmente agregamos la siguiente línea, arriba del tag </head> , de la pagina donde se desee llamar la función:

Espero los pueda ayudar, cualquier duda me escriben por este post o a mi  correo, hasta pronto.
"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""


Share:

Mailcheck Plugin jQuery reduce errores tipográficos en Direcciones de correo electrónico


MailCheck es un plugin jQuery muy interesante, el cual nos permite validar correos electrónicos. Funciona de tal forma que nos sugiere un dominio adecuado cuando los usuarios escriben mal una dirección de correo electrónico. Ejemplo; cuando un usuario teclea "users@hotail.con", Mailcheck sugerirá "users@hotmail.com". Mailcheck ofrecerá hasta sugerencias de dominios de nivel superior también, y sugieren ". Com" cuando un usuario escribe "users@hotmail.cmo".

MailCheck

Esta información la confronta con una lista de dominios de correo electrónico más frecuentes como son: yahoo.com, google.com, hotmail.com, gmail.com, me.com, aol.com, mac.com, live.com, comcast.net, googlemail.com, msn.com, hotmail. co.uk, yahoo.co.uk, facebook.com, verizon.net, sbcglobal.net, att.net, gmx.com y mail.com., así como con aquellos que nosotros le indiquemos.

Los dominios de primer nivel predeterminados que se incluyen son: com, net, org, info, edu, gov, co.uk, y mil.

Ejemplo

Incluimos las librerias de jQuery y Mailcheck en nuestra página.




Agregamos un campo de texto.


Ahora, coloque Mailcheck al campo de texto. Se declara una matriz de dominios y los dominios de nivel superior que desea comprobar.


Mailcheck toma en dos devoluciones de llamada, sugirió y vacío. Se recomienda suministrar ambos, sugirió que se llama cuando hay una sugerencia. Mailcheck pasa por el elemento de destino y la sugerencia.

La sugerencia es un objeto con los siguientes miembros:

{
  Dirección: 'test', // la dirección y parte antes del símbolo @
  domain: 'hotmail.com', // el dominio sugerido
  topLevelDomain: 'com',    // the suggested top level domain
  completo: 'test@hotmail.com' // el correo electrónico completa sugerido
}

vacío se llama cuando no hay sugerencia. Mailcheck sólo pasa en el elemento de destino.

Para los que deseen optimizar sus sitios con este interesante componente, se encuentra disponible de forma libre, se pueden dirigir a la siguiente documentación.
Share:

Excluir IP de las estadísticas de Google Analytics

Al crear mi blog tuve la necesidad de realizar seguimiento a los usuarios que visitan el sitio. Para esto tome la opción de realizarlo a través de Google Analytics, ya que es una aplicación sencilla y muy extensible en sus funcionalidades. Luego de esto, me di cuenta que en las estadísticas aparecían visitas desde mi maquina por modificaciones o ajustes que realizaba. Debido a esto tuve la necesidad de excluir mi Ip de las estadísticas con el fin de tener cifras mas exactas y hacer seguimiento del comportamiento que tenian  los usuarios con el sitio.

Como primer paso para solucionar lo anterior, debemos conocer nuestra Ip en Internet, para esto podemos ir a: Cual es mi Ip

Crear filtro

Ya teniendo nuestra Ip procedemos a ingresar al Administrador de Google Analytics, ingresamos a la pestaña Filtros

Filtros
Luego damos click en Filtro nuevo

Crear filtro

Para configurar el filtro seguimos los siguientes pasos:

1. Seleccionamos un método para aplicar el filtro, para este caso Crear filtro nuevo
2. En nombre del filtro, escribimos un nombre que nos identifique lo que vamos a realizar, para este caso lo llame Excluir mi IP.
3. En tipo de filtro marcamos Filtro personalizado, opción Excluir.
4. Para Campo de filtro buscamos el que diga Dirección IP.
5. En Patrón de filtro escribimos la Ip de nuestro equipo. Tener presente colocar antes del punto la barra invertida(\) - realizándolo de esta forma me funciono, si alguien lo prueba sin la barra invertida me cuenta como le va.
6. En distinción de mayúsculas y minúsculas marcamos No

Finalmente damos click en Guardar y ya nuestra Ip no se tomara en cuenta en las estadísticas de nuestro sitio.

Añadir filtro

Realicen la prueba y me cuentan, como les va. Hasta pronto.
Share:

Obtener Día, Mes y Año en SQL Server

A través del siguiente código SQL, podemos obtener de un forma rápida el día, mes y año de una fecha.

Cómo separar una fecha por dia mes y año en sql

Una forma sencilla de separar el día, mes y año de una fecha en sql, es a travez de las funciones DateName y DatePart.

El código esta comentado línea a línea, si tienen algún comentario o sugerencia al mismo me escriben.
Declare @Fecha Datetime,
     @Dia Varchar(2),
     @Mes Varchar(12),
     @Ano Varchar(4)
  
--Guardamos en variable el día de hoy
Set @Fecha = Getdate()

--Establecemos idioma para retornar el formato de la fecha - para este caso español
Set Language spanish

--Retornamos el dia, mes y año de la fecha
Set @Dia = Datepart(dd,convert(datetime,@Fecha,103)) 
Set @Mes = DateName(mm,convert(datetime,@Fecha,103))
Set @Ano = Datepart(yy,convert(datetime,@Fecha,103))

--Establecemos el lenguaje original
Set Language English

--Retornamos variables con los datos
Select @Dia Dia,@Mes Mes,@Ano Año
El resultado seria el siguiente:

Fecha SQL
Leer Mas:

Si queremos consultar el lenguaje configurado en le servidor de base de datos, lo podemos conocer a través de la siguiente instrucción:
select @@LANGUAGE Lenguaje
"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""

Share:

Instalar Visual Studio 2010

Hola como estan, aunque ya tenemos disponible la ultima versión de Visual Studio 2012, recientemente tuve la necesidad de instalar Visual Studio 2010 por razones de mantenimiento de una aplicación web. Es por esto que hoy les traigo un paso a paso de la instalación espero sea de su utilidad.

La primera ventana que nos aparece, nos da la bienvenida a la instalación, aquí se cargan componentes necesarios para el inicio de la instalación:


Luego nos muestra los términos y condiciones de licencia, dar clik en Next o siguiente.


Aquí nos permite seleccionar por una instalación full (completa) o Custom (personalizado), a la derecha nos muestra una breve descripción de la instalación ruta o paht y espacio requerido para una correcta instalación.


Seleccionando la opción Custom o personalizada, el wizard de la instalación nos permite marcar que aplicaciones o componentes del Visual Studio deseamos instalar como lo muestran las dos siguientes imagenes:



Al dar clik en Instal (Instalar) el proceso inicia en forma la instalación de los componentes, como lo indica la siguiente imagen: 



Finalmente terminado el anterior proceso correctamente, el wizard nos muestra una imagen como la siguiente donde los indica que toda la instalacion se realizo satisfactoriamente:


Dando clik en finish, la instalación nos solicita reiniciar el computador para que todos los cambios queden aplicados.


Como pueden ver, es una instalación bastante estable y segura de realizar, si llegan a tener algún comentario o duda me cuentan, hasta pronto.




Share:

Inicializar campo IDENTITY

Para inicializar columnas IDENTITY se pueden utilizar las siguientes 2 opciones:

1. Una opción es a través de la instrucción Sql TRUNCATE TABLE, además de borrar el contenido de la tabla inicializa el valor del campo IDENTITY.

Ejemplo:
TRUNCATE TABLE tbIdentiy

2. La segunda es usando el comando DBCC CHECKIDENT.

Esta instrucción permite resetear el valor que queremos del campo Identity, así:

DBCC CHECKIDENT (tbIdentiy,RESEED,1)

Tener cuidado con el uso de este comando, ya que podemos resetear un valor menor al máximo de la tabla y crear en algún momento un valor duplicado.
"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""
Share:

Como Crear de forma fácil Columna Identity en SQL Server

El atributo Identity puede ser utilizado al crear tablas con campos numéricos (int,smallint, bigint, y tinyint), en sentencias Create Table y Alter Table.

Pero como crear de forma fácil una Columna Identity?, antes de saber Como, debe entender que en que consiste.

Es aquella columna que nos permite generar valores secuenciales e incrementables automáticamente cada vez que se inserta un nuevo registro en una tabla, Sql se encarga de asignarle el valor numérico correspondiente a la columna.

Veamos como funciona, creando una tabla con una columna IDENTITY:

CREATE TABLE tbIdentiy 
(
Id Int NOT NULL IDENTITY(1,1) PRIMARY KEY,
Descripcion Varchar(20) NOT NULL 
)
Go

Podemos observar en el anterior script, que la columna identidad (id) es entera, no se permiten valores nulos (NOT NULL)  esta parametrizada como IDENTITY(1,1), esto significa que inicia en 1 y se incrementa de 1 en 1, además la columna la establecemos como llave primaria (PRIMARY KEY), no es necesario, pero es recomendable establecer como llave primaria a este tipo de columnas.

Con la tabla ya creada, veamos como insertamos los datos:

Insert Into tbIdentiy(Id,Descripcion) Values(1,'Vb.Net')
Go


Ejecutando la anterior sentencia sql nos genera un error, ya que estamos estableciendo el valor 1 a la columna IDENTITY.


Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for IDENTITY column in table 'tbIdentiy' when IDENTITY_INSERT is set to OFF.

Ejecutemos la sentencia, pero sin incluir la columna Id

Insert Into tbIdentiy(Descripcion) Values('Vb.Net')
Go
(1 row(s) affected)

La ejecución fue satisfactoria, consultando la tabla

Select Id,Descripcion From Dbo.tbIdentiy


Si insertamos mas registros en la tabla:

Insert Into tbIdentiy(Descripcion) Values('C#')
Go
Insert Into tbIdentiy(Descripcion) Values('Sql Server')
Go

Identity 3 Rows






Nos damos cuenta, que por cada inserción en la tabla, Sql incrementa automáticamente la columna Id y esto es por el atributo IDENTITY.

Como recomendación anexo post que nos permite Inicializar un campo IDENTITY.

Espero les sirva esta documentación, hasta pronto.
Share: