Mostrando las entradas con la etiqueta SQL Server. Mostrar todas las entradas
Mostrando las entradas con la etiqueta SQL Server. Mostrar todas las entradas

viernes, 17 de noviembre de 2017

El Manual del Día: ADO.NET 3.5

MSDN - Manual de ADO.NET 3.5

Titulo: Manual de ADO.NET 3.5
Fuente Original: Microsoft Developer Network (MSDN)
Compilado Por: Luis Dueñas Huaroto (Lduenas)
Año de Compilación: 2008
Número de Páginas: 197

Indice del Manual de ADO.NET 3.5

1. Novedades en ADO.NET
2. Guía Básica de ADO.NET
3. Información General Acerca de ADO.NET
  3.1. Arquitectura de ADO .NET
  3.2 Proveedores de Datos de .NET Framework
  3.3. DataSets
  3.4. Ejecución en Paralelo
  3.5. Código de Ejemplo
4. Proteger Aplicaciones de ADO.NET
  4.1. Información General de Seguridad
  4.2. Acceso Seguro a Datos
  4.3. Aplicaciones Cliente Seguras
  4.4. Seguridad de Acceso del Código y ADO.NET
  4.5. Privacidad y Seguridad de Datos
5. Trabajar con Objetos DataSet
  5.1. Crear un DataSet
  5.2. Agregar un DataTable a un DataSet
  5.3. Agregar DataRelations
  5.4. Navegar por DataRelations
  5.5. Combinar Contenido de un DataSet
  5.6. Copiar Contenido de un DataSet
  5.7. Control de Eventos del DataSet
  5.8. DataSets con Establecimiento de Tipos
    5.8.1. Generar Objetos DataSet con Establecimiento Inflexible de Tipos
    5.8.2. Anotar DataSets con Establecimiento de Tipos
  5.9. DataTables
    5.9.1. Crear un DataTable
    5.9.2. Definición de Esquema de un DataTable
      5.9.2.1. Agregar Columnas al DataTable
      5.9.2.2. Crear Columnas de Expresión
      5.9.2.3. Crear Columnas AutoIncrement
      5.9.2.4. Definir Claves Principales
      5.9.2.5. Restricciones del DataTable
    5.9.3. Manipular Datos en el DataTable
      5.9.3.1. Agregar Datos al DataTable
      5.9.3.2. Ver Datos en un DataTable
      5.9.3.3. El Método Load
      5.9.3.4. Editar el DataTable
      5.9.3.5. Estados de Fila y Versiones de Fila
      5.9.3.6. Eliminar un DataRow
      5.9.3.7. Información de Errores de Fila
      5.9.3.8. AcceptChanges y RejectChanges
      5.9.3.9. Control de Eventos del DataTable
  5.10. DataTableReaders
    5.10.1. Crear un DataReader
    5.10.2. Navegar por DataTables
  5.11. DataViews
    5.11.1. Crear DataView
    5.11.2. Ordenar y Filtrar Datos
    5.11.3. DataRows y DataRowViews
    5.11.4. Buscar Filas
    5.11.5. ChildViews y Relaciones
    5.11.6. Modificar Objetos DataView
    5.11.7. Tratamiento de Eventos del DataView
    5.11.8. Administrar DataViews
    5.11.9. Crear DataTable Desde un DataView
  5.12. Utilizar XML en un DataSet
    5.12.1. DiffGrams
    5.12.2. Cargar DataSet desde un XML
    5.12.3. Escribir Contenido del DataSet como Datos XML
    5.12.4. Cargar la Información de Esquema de un DataSet desde XML
    5.12.5. Escribir la Información de Esquema de un DataSet como XSD
    5.12.6. Sincronización del DataSet y XmlDataDocument
      5.12.6.1. Sincronizar el DataSet con el XmlDataDocument
      5.12.6.2. Realizar una Consulta de XPath en un DataSet
      5.12.6.3. Aplicar una Transformación XSL a un DataSet
    5.12.7. Anidar DataRelations
  5.13. Consumir DataSet a partir de un Servicio Web XML
6. Manipular Datos
  6.1. Conectar con un Origen de Datos
    6.1.1. Establecer la Conexión
    6.1.2. Eventos de Conexión
    6.1.3. Contadores de Rendimiento
  6.2. Cadenas de Conexión
    6.2.1. Generadores de Cadenas de Conexión
    6.2.2. Cadenas de Conexión y Archivos de Configuración
    6.2.3. Sintaxis de la Cadena de Conexión
    6.2.4. Proteger la Información de Conexión
  6.3. Agrupación de Conexiones
    6.3.1. Agrupación de Conexiones en SQL Server
    6.3.2. Agrupación de Conexiones OLE DB, ODBC y Oracle
  6.4. Comandos
    6.4.1. Ejecutar un Comando
    6.4.2. Configurar Parámetros
    6.4.3. Generar Comandos con Objetos CommandBuilder
    6.4.4. Obtener un Unico Valor de una Base de Datos
    6.4.5. Utilizar Comandos para Modificar Datos
      6.4.5.1. Actualizar Datos en un Origen de Datos
      6.4.5.2. Realizar Operaciones de Catálogo
  6.5. DataReaders
    6.5.1. Recuperar Datos Mediante DataReader
    6.5.2. Recuperar Datos Binarios
  6.6. DataAdapters
    6.6.1. Rellenar un Objeto DataSet desde un Objeto DataAdapter
    6.6.2. Parámetros DataAdapter
    6.6.3. Agregar Restricciones Existentes al DataSet
    6.6.4. Asignar DataAdapter
    6.6.5. Paginar a Través de un Resultado de Consulta
    6.6.6. Actualizar Orígenes de Datos con DataAdapters
    6.6.7. Control de Eventos del DataAdapter
    6.6.8. Realizar Operaciones por Lotes con DataAdapter
  6.7. Recuperar Valores de Identidad o Valores Autonuméricos
  6.8. Transacciones
    6.8.1. Transacciones Locales
    6.8.2. Transacciones Distribuidas
    6.8.3. Integración de System.Transactions con SQL Server
  6.9. Modificar Datos con Procedimientos Almacenados

Descarga:
MSDN_Manual_ADO.NET_3.5

viernes, 31 de marzo de 2017

Nuevos Demos de WinForms

Nuevos Demos de WinForms - Crear Utilitarios de Windows en .NET

A partir de la próxima semana estaré publicando en este Blog una Serie de Demos llamada: "Crear Utilitarios de Windows en .NET" donde explicaré como crear los utilitarios mas populares de Windows en C#, entre ellos:

- El Bloc de Notas (Notepad)
- El Explorador de Windows (Explorer)
- El MS Paint
- La Calculadora (Calc)
- El Registro de Windows (RegEdit)
- Un Chat con Archivos Compartidos (en tiempo real)
- Un Explorador de SQL Server
- Un Generador de Código MVC, etc

Cada Utilitario vendrá con lo siguiente:
1. La explicación del código
2. El código para descargar
3. El Video (en Youtube) para ver paso a paso cómo fue construido (en menos de 30 minutos)

Los que desean cualquier otro Programa (Utilitario) popular pueden enviar sus sugerencias a: Luis.duenash@gmail.com

Esta publicación será una vez por semana, pero además volveremos a subir mas Libros, publicar mas Personajes importantes del mundo del desarrollo, etc.

Saludos a todos los visitantes.

sábado, 6 de agosto de 2016

El Libro del Día: Beginning Visual Basic 2015

El Libro del Día: 2016-08-06

Titulo: Beginning Visual Basic 2015
Autor: Bryan Newsome
Editorial: Wrox
Nro Paginas: 621

Capítulos:
Chapter 1 Welcome to Visual Basic 2015
Chapter 2 The Microsoft .NET Framework
Chapter 3 Writing Software
Chapter 4 Controlling the Flow
Chapter 5 Working with Data Structures
Chapter 6 Building Windows Applications
Chapter 7 Displaying Dialogs
Chapter 8 Creating Menus
Chapter 9 Debugging and Error Handling
Chapter 10 Building Objects
Chapter 11 Advanced Object-Oriented Techniques
Chapter 12 Accessing Data Using Structured Query Language
Chapter 13 Database Programming with SQL Server and ADO.NET
Chapter 14 ASP.NET
Chapter 15 Deploying Your Application
Chapter 16 Windows 8 Apps
Appendix Exercise Solutions

Descarga:
Beginning_Visual_Basic_2015

martes, 15 de diciembre de 2015

El Libro del Día: Introducing SQL Server

El Libro del Día: 2015-12-15

Titulo: Introducing SQL Server
Autor: Mike McQuillan
Editorial: Apress
Nro Paginas: 397

Capítulos:
Chapter 1: What Is SQL Server
Chapter 2: Obtaining and Installing SQL Server
Chapter 3: Database Basics
Chapter 4: Tables
Chapter 5: Putting Good Tables Together
Chapter 6: Automating Deployment with SQLCMD
Chapter 7: NULLs and Table Constraints
Chapter 8: DML (or Inserts, Updates, and Deletes)
Chapter 9: Bulk Inserting Data
Chapter 10: Creating Data Import Scripts
Chapter 11: The SELECT Statement
Chapter 12: Joining Tables
Chapter 13: Views
Chapter 14: Indexes
Chapter 15: Transactions
Chapter 16: Functions
Chapter 17: Table-Valued Functions
Chapter 18: Stored Procedures Part 1
Chapter 19: Stored Procedures Part 2
Chapter 20: Bits and Pieces
Appendix A: SQL Data Types
Appendix B: Glossary
Appendix C: Common SQL Server System Objects
Appendix D: Exercises

Descarga:
Introducing_SQL_Server

jueves, 22 de octubre de 2015

El Libro del Día: Expert SQL Server In-Memory OLTP

El Libro del Día: 2015-10-22

Titulo: Expert SQL Server In-Memory OLTP
Autor: Dmitri Korotkevitch
Editorial: Apress
Nro Paginas: 258

Capítulos:
Chapter 1: Why In-Memory OLTP?
Chapter 2: In-Memory OLTP Objects
Chapter 3: Memory-Optimized Tables
Chapter 4: Hash Indexes
Chapter 5: Nonclustered Indexes
Chapter 6: In-Memory OLTP Programmability
Chapter 7: Transaction Processing in In-Memory OLTP
Chapter 8: Data Storage, Logging, and Recovery
Chapter 9: Garbage Collection
Chapter 10: Deployment and Management
Chapter 11: Utilizing In-Memory OLTP
Appendix A: Memory Pointers Management
Appendix B: Page Splitting and Page Merging in Nonclustered Indexes .
Appendix C: Analyzing the States of Checkpoint File Pairs
Appendix D: In-Memory OLTP Migration Tools

Descarga:
Expert_SQL_Server_in_Memory_OLTP

lunes, 25 de mayo de 2015

El Libro del Día: Expert TSQL Window Functions in SQL Server

El Libro del Día: 2015-05-25

Titulo: Expert TSQL Window Functions in SQL Server
Autor: Kathi Kellenberger, Clayton Groom
Editorial: Apress
Nro Paginas: 140

Capítulos:
Chapter 1: Looking Through the Window
Chapter 2: Discovering Ranking Functions
Chapter 3: Summarizing with Window Aggregates
Chapter 4: Tuning for Better Performance
Chapter 5: Calculating Running and Moving Aggregates
Chapter 6: Adding Frames to the Window
Chapter 7: Taking a Peek at Another Row
Chapter 8: Understanding Statistical Functions
Chapter 9: Time Range Calculations and Trends

Descarga:
Expert_TSQL_Window_Functions_in_SQL_Server

jueves, 21 de agosto de 2014

El Libro del Día: Professional SQL Server 2012 Internals and Troubleshooting

El Libro del Día: 2014-08-21

Titulo: Professional SQL Server 2012 Internals and Troubleshooting
Autor: Christian Bolton, Justin Langford, Glenn Berry, Gavin Payne, Amit Banerjee, Rob Farley
Editorial: Wrox
Nro Paginas: 580

Capítulos:
PART I INTERNALS
CHAPTER 1 SQL Server Architecture
CHAPTER 2 Demystifying Hardware
CHAPTER 3 Understanding Memory
CHAPTER 4 Storage Systems
CHAPTER 5 Query Processing and Execution
CHAPTER 6 Locking and Concurrency
CHAPTER 7 Latches and Spinlocks
CHAPTER 8 Knowing Tempdb
PART II T ROUBLESHOOTING TOOLS AND LESSONS
FROM THE FIELD
CHAPTER 9 Troubleshooting Methodology and Practices
CHAPTER 10 Viewing Server Performance with PerfMon and the PAL Tool
CHAPTER 11 Consolidating Data Capture with SQLdiag
CHAPTER 12 Bringing It All Together with SQL Nexus
CHAPTER 13 Diagnosing SQL Server 2012 Using Extended Events
CHAPTER 14 Enhancing Your Troubleshooting Toolset with PowerShell
CHAPTER 15 Delivering a SQL Server Health Check
CHAPTER 16 Delivering Manageability and Performance
CHAPTER 17 Running SQL Server in a Virtual Environment

Descarga:
Professional_SQLServer2012_Internals_Troubleshooting

martes, 22 de julio de 2014

El Libro del Día: Microsoft SQL Server 2012 Internals

El Libro del Día: 2014-07-22

Titulo: Microsoft SQL Server 2012 Internals
Autor: Kalen Delaney, Bob Beauchemin, Conor Cunningham, 
          Jonathan Kehayias, Benjamin Nevarez, Paul S. Randal
Editorial: Microsoft
Nro Paginas: 983

Capítulos:
Chapter 1 SQL Server 2012 architecture and configuration
Chapter 2 The SQLOS
Chapter 3 Databases and database files
Chapter 4 Special databases
Chapter 5 Logging and recovery
Chapter 6 Table storage
Chapter 7 Indexes: internals and management
Chapter 8 Special storage
Chapter 9 Special indexes
Chapter 10 Query execution
Chapter 11 The Query Optimizer
Chapter 12 Plan caching and recompilation
Chapter 13 Transactions and concurrency
Chapter 14 DBCC internals

Descarga:
Microsoft_SQL_Server_2012_Internals

domingo, 13 de julio de 2014

El Libro del Día: SQL For Dummies (8th Edition)

El Libro del Día: 2014-07-13

Titulo: SQL For Dummies (8th Edition)
Autor: Allen G. Taylor
Editorial: For Dummies
Nro Paginas: 483

Capítulos:
Introduction
Part I: Getting Started with SQL
Chapter 1: Relational Database Fundamentals
Chapter 2: SQL Fundamentals
Chapter 3: The Components of SQL
Part II: Using SQL to Build Databases
Chapter 4: Building and Maintaining a Simple Database Structure
Chapter 5: Building a Multitable Relational Database
Part III: Storing and Retrieving Data
Chapter 6: Manipulating Database Data
Chapter 7: Handling Temporal Data
Chapter 8: Specifying Values
Chapter 9: Using Advanced SQL Value Expressions
Chapter 10: Zeroing In on the Data You Want
Chapter 11: Using Relational Operators
Chapter 12: Delving Deep with Nested Queries
Chapter 13: Recursive Queries
Part IV: Controlling Operations
Chapter 14: Providing Database Security
Chapter 15: Protecting Data
Chapter 16: Using SQL within Applications
Part V: Taking SQL to the Real World
Chapter 17: Accessing Data with ODBC and JDBC
Chapter 18: Operating on XML Data with SQL
Part VI: Advanced Topics
Chapter 19: Stepping through a Dataset with Cursors
Chapter 20: Adding Procedural Capabilities with Persistent Stored Modules
Chapter 21: Handling Errors
Chapter 22: Triggers
Part VII: The Part of Tens
Chapter 23: Ten Common Mistakes
Chapter 24: Ten Retrieval Tips
Appendix: SQL: 2011 Reserved Words

Descarga:
SQL_Dummies

jueves, 3 de julio de 2014

El Demo del Día: Convertir Lista de Objetos en un Archivo DBF y Viceversa

Convertir Lista de Objetos en un Archivo DBF y Viceversa

Requerimiento

Se desea leer datos de una Base de Datos de SQL Server y a partir de estos crear un archivo DBF.

Solución

Usamos una Lista de Objetos para recibir los datos de SQL Server y luego usamos OLEDB y Reflection para crear una tabla e insertar los registros en esta.

Crear la Clase con los Métodos de Conversión

Crear una aplicación Windows Forms en C# llamada "Exportar_DBF" y luego crear una clase con 2 métodos estáticos, uno que genere un archivo DBF a partir de una lista de objetos y otro que a partir de un archivo DBF genere una Lista de Objetos, tal como se muestra en el siguiente código:

using System;
using System.Text; //StringBuilder
using System.Collections.Generic; //List<T>
using System.Reflection; //PropertyInfo, Assembly
using System.Data; //CommandBehavior
using System.Data.OleDb; //OledbConnection, OledbCommand, OleDbDataReader
using System.IO; //File, Path

namespace Exportar_DBF
{
    public class ucListaDBF<T>
    {
        public static void ListaADBF(List<T> lista,string nombreTabla)
        {
            StringBuilder sbCreate = new StringBuilder();
            sbCreate.Append("Create Table ");
            sbCreate.Append(nombreTabla);
            sbCreate.AppendLine(" (");
            PropertyInfo[] propiedades = lista[0].GetType().GetProperties();
            for (int i = 0; i < propiedades.Length; i++)
            {
                sbCreate.Append(propiedades[i].Name);
                sbCreate.Append(" ");
                sbCreate.Append(convertirTipo(propiedades[i].PropertyType.ToString()));
                if (i < propiedades.Length - 1) sbCreate.AppendLine(",");
            }
            sbCreate.AppendLine("");
            sbCreate.AppendLine(")");

            string ruta = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            string archivo = string.Format("{0}\\{1}.dbf", ruta, nombreTabla);
            if (File.Exists(archivo)) File.Delete(archivo);
            using (OleDbConnection con = new OleDbConnection
                ("provider=Microsoft.Jet.Oledb.4.0;data source=" + ruta + ";
                  extended properties=dBase IV"))
            {
                con.Open();
                OleDbCommand cmd = new OleDbCommand(sbCreate.ToString(), con);
                cmd.ExecuteNonQuery();

                StringBuilder sbInsert = new StringBuilder();
                for (int j = 0; j < lista.Count; j++)
                {
                    sbInsert.Clear();
                    propiedades = lista[j].GetType().GetProperties();
                    sbInsert.Append("Insert Into ");
                    sbInsert.Append(nombreTabla);
                    sbInsert.Append(" Values (");
                    for (int i = 0; i < propiedades.Length; i++)
                    {
                        if (propiedades[i].PropertyType.ToString().Contains("String")
                            || propiedades[i].PropertyType.ToString().Contains("DateTime"))
                            sbInsert.Append("'");
                        sbInsert.Append(propiedades[i].GetValue(lista[j], null).ToString().Replace("'",""));
                        if (propiedades[i].PropertyType.ToString().Contains("String")
                            || propiedades[i].PropertyType.ToString().Contains("DateTime"))
                            sbInsert.Append("'");
                        if (i < propiedades.Length - 1) sbInsert.Append(",");
                    }
                    sbInsert.AppendLine(")");
                    cmd.CommandText = sbInsert.ToString();
                    cmd.ExecuteNonQuery();
                }
            }
        }

        private static string convertirTipo(string tipoNET)
        {
            string tipoOLEDB = "";
            tipoNET = tipoNET.ToLower();
            if (tipoNET.Contains("int")) tipoOLEDB = "Long";
            else
            {
                if (tipoNET.Contains("decimal")) tipoOLEDB = "Double";
                else
                {
                    if (tipoNET.Contains("datetime")) tipoOLEDB = "DateTime";
                    else
                    {
                        tipoOLEDB = "Text(100)";
                    }
                }
            }
            return (tipoOLEDB);
        }

        public static List<T> DBFALista(string nombreTabla)
        {
            List<T> lista = new List<T>();
            Type tipo = typeof(T);
            string ruta = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            using (OleDbConnection con = new OleDbConnection
                ("provider=Microsoft.Jet.Oledb.4.0;data source=" + ruta + ";
                  extended properties=dBase IV"))
            {
                con.Open();
                OleDbCommand cmd = new OleDbCommand("Select * From " + nombreTabla, con);
                OleDbDataReader drd = cmd.ExecuteReader(CommandBehavior.SingleResult);
                if (drd != null)
                {
                    object obe = null;
                    string tipoDato;
                    PropertyInfo propiedad;
                    while (drd.Read())
                    {
                        obe = Activator.CreateInstance(tipo);
                        for (int i = 0; i < drd.FieldCount; i++)
                        {
                            propiedad = obe.GetType().GetProperty(drd.GetName(i).ToLower(),
                                BindingFlags.IgnoreCase|BindingFlags.Public|BindingFlags.Instance);
                            tipoDato = drd[i].GetType().ToString().ToLower();
                            if (tipoDato.Contains("int16")) propiedad.SetValue(obe, drd.GetInt16(i));
                            else
                            {
                                if (tipoDato.Contains("int32")) propiedad.SetValue(obe, drd.GetInt32(i));
                                else
                                {
                                    if (tipoDato.Contains("decimal")) propiedad.SetValue
                                      (obe, drd.GetDecimal(i));
                                    else
                                    {
                                        if (tipoDato.Contains("datetime")) propiedad.SetValue
                                          (obe, drd.GetDateTime(i));
                                        else
                                        {
                                            if (tipoDato.Contains("double")) propiedad.SetValue
                                              (obe, (int)drd.GetDouble(i));
                                            else propiedad.SetValue(obe, drd.GetString(i));
                                        }
                                    }
                                }
                            }
                        }
                        lista.Add((T)obe);
                    }
                }
            }
            return (lista);
        }
    }
}

Nota: Por defecto OLEDB crea en mayúsculas el nombre de la tabla y los campos, es por eso que para leer la propiedad se usa el método "GetProperty" con 2 parámetros: el nombre del campo y un flag que indica que no sea case sensitive: BindingFlags.IgnoreCase|BindingFlags.Public|BindingFlags.Instance.

Crear el Procedimiento Almacenado en la Base de Datos de SQL Server

Create Procedure [dbo].[uspEmployeesListar]
As
Select EmployeeID,LastName,FirstName,
IsNull(BirthDate,'1/1/1900') As BirthDate
From Employees Order By 1

Crear la Clase con la Entidad del Negocio

using System;
namespace Exportar_DBF
{
    public class beEmpleado
    {
        public int IdEmpleado { get; set; }
        public string Apellido { get; set; }
        public string Nombre { get; set; }
        public DateTime FechaNac { get; set; }
    }
}

Nota: Para el caso de trabajar con DBF tener cuidado que los nombres de las propiedades tengan como máximo 10 caracteres, de lo contrario el método "DBFALista" generará un error.

Crear la Clase de Datos

using System;
using System.Data; //CommandType
using System.Data.SqlClient; //SqlConnection, SqlCommand, SqlDataReader
using System.Collections.Generic; //List

namespace Exportar_DBF
{
    public class daEmpleado
    {
        public List<beEmpleado> listar(SqlConnection con)
        {
            List<beEmpleado> lbeEmpleado = null;
            SqlCommand cmd = new SqlCommand("uspEmployeesListar", con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataReader drd = cmd.ExecuteReader(CommandBehavior.SingleResult);
            if (drd != null)
            {
                lbeEmpleado = new List<beEmpleado>();
                int posIdEmpleado = drd.GetOrdinal("EmployeeID");
                int posApellido = drd.GetOrdinal("LastName");
                int posNombre = drd.GetOrdinal("FirstName");
                int posFechaNacimiento = drd.GetOrdinal("BirthDate");
                beEmpleado obeEmpleado;
                while (drd.Read())
                {
                    obeEmpleado = new beEmpleado();
                    obeEmpleado.IdEmpleado = drd.GetInt32(posIdEmpleado);
                    obeEmpleado.Apellido = drd.GetString(posApellido);
                    obeEmpleado.Nombre = drd.GetString(posNombre);
                    obeEmpleado.FechaNac = drd.GetDateTime(posFechaNacimiento);
                    lbeEmpleado.Add(obeEmpleado);
                }
                drd.Close();
            }
            return (lbeEmpleado);
        }
    }
}

Crear la Clase con las Reglas del Negocio

using System;
using System.Collections.Generic;
using System.Data.SqlClient; //SqlConnection
using System.Configuration; //ConfigurationManager

namespace Exportar_DBF
{
    public class brEmpleado
    {
        public string Conexion { get; set; }

        public brEmpleado()
        {
            Conexion = ConfigurationManager.ConnectionStrings
                ["conNW"].ConnectionString;
        }

        public List<beEmpleado> listar()
        {
            List<beEmpleado> lbeEmpleado = null;
            using (SqlConnection con = new SqlConnection(Conexion))
            {
                try
                {
                    con.Open();
                    daEmpleado odaEmpleado = new daEmpleado();
                    lbeEmpleado = odaEmpleado.listar(con);
                }
                catch (SqlException ex)
                {
                    //Capturar el error y grabar un Log
                }
            } //con.Close(); con.Dispose(); con = null;
            return (lbeEmpleado);
        }
    }
}

Modificar el Archivo de Configuración de la Aplicación

Abrir el archivo App.Config y aumentar la cadena de conexión a Northwind (conNW):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
      <add name="conNW" providerName="SQLServer"
         connectionString="uid=UsuarioNW;pwd=123456;
         data source=DSOFT\Sqlexpress;database=Northwind"/>
    </connectionStrings>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

Crear el Formulario Windows Forms de Prueba

Cambiar el nombre del formulario a "frmListaDBF" y arrastrar 3 controles:
- Un DataGridView llamado "dgvEmpleado"
- Un Button llamado "btnExportarDBF"
- Un Button llamado "btnCargarDBF"


Escribir el siguiente código en el formulario:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace Exportar_DBF
{
    public partial class frmListaDBF : Form
    {
        private List<beEmpleado> lbeEmpleado;

        public frmListaDBF()
        {
            InitializeComponent();
        }

        private void cargarDatosSQL(object sender, EventArgs e)
        {
            brEmpleado obrEmpleado = new brEmpleado();
            lbeEmpleado = obrEmpleado.listar();
            dgvEmpleado.DataSource = lbeEmpleado;
        }

        private void exportarListaDBF(object sender, EventArgs e)
        {
            ucListaDBF<beEmpleado>.ListaADBF(lbeEmpleado, "Empleado");
            MessageBox.Show("DBF creado");
        }

        private void cargarDBF(object sender, EventArgs e)
        {
            lbeEmpleado = ucListaDBF<beEmpleado>.DBFALista("Empleado");
            MessageBox.Show("Lista creada");
        }
    }
}

Ejecutar y Probar el Formulario Creado

Grabar la aplicación, compilar y ejecutar, clic al botón "Exportar a DBF" y se creará en el directorio de la aplicación "Exportar_DBF\bin\Debug" el archivo "EMPLEADO.DBF", luego para comprobar que el DBF fue creado clic al botón "Cargar DBF" que lee el DBF en una lista de objetos y lo muestra en la misma grilla.


Comentario Final

Usando OLEDB y Reflection hemos creado dinámicamente un archivo DBF con datos almacenados en una lista de objetos, también hemos realizado la carga del archivo DBF en una Lista de Objetos. El único cuidado que debemos tener es que los nombres de campos no deben pasar los 10 caracteres porque hay una limitación de los campos en un archivo DBF.

Descarga:
Demo09_Exportar_DBF

martes, 10 de junio de 2014

El Libro del Día: Ultra-Fast ASP.NET 4.5

El Libro del Día: 2014-06-10

Titulo: Ultra-Fast ASP.NET 4.5
Autor: Richard Kiessig
Editorial: Apress
Nro Paginas: 459

Capítulos:
Chapter 1: Principles and Method
Chapter 2: Client Performance
Chapter 3: Caching
Chapter 4: IIS 7.5
Chapter 5: ASP.NET Threads and Sessions
Chapter 6: Using ASP.NET to Implement and Manage Optimization Techniques
Chapter 7: Managing ASP.NET Application Policies
Chapter 8: SQL Server Relational Database
Chapter 9: SQL Server Analysis Services
Chapter 10: Infrastructure and Operations
Chapter 11: Putting It All Together

Descarga:
UltraFast_ASP.NET_4.5