Tutorial de SQL Server 2005 Express

download Tutorial de SQL Server 2005 Express

of 109

Transcript of Tutorial de SQL Server 2005 Express

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    1/10

    1

    Tutorial de SQL Server 2005 ExpressEn este tutorial, aprender los fundamentos para desarrollar aplicaciones con la versin Expressde SQL Server 2005. El objetivo del tutorial no es cubrir en gran detalle todos los aspectos de SQLServer 2005 Express, pero si aportar una idea general del producto y su integracin con el restode herramientas Express (Visual Basic Express, Visual C# Express, y Visual J# Express

    El tutorial cubrir los siguientes puntos:

    Mdulo 1: Introduccin a SQL Server Express

    Requisitos del sistema, instalacin del producto, y descripcin de sus componentes. Integracin del producto con otras versiones Express; durante el tutorial se trabajar con la

    versin Express de Visual Basic; sin embargo todos los ejemplos y demostraciones usados sonaplicables a Visual C#, y J#.

    Proceso de despliegue de aplicaciones desarrolladas con Visual Basic Express. ConceptosXCOPY, instancias de usuario no-administrador, y duplicacin de datos.

    Proveedores de acceso a datos disponibles. A la hora de conectar a un servidor de base dedatos como SQL Server 2005 Express, el nexo de comunicacin entre el servidor y laaplicacin cliente, es el proveedor de acceso a datos; se hablar e introducir brevemente losproveedores de acceso a datos disponibles.

    Mdulo 2: Creacin de bases de datos con Visual Studio

    Objetos bsicos del sistema. Conocer aspectos de la base de datos como su creacin tipos dedatos disponibles en SQL Server 2005, crear tablas, restricciones (constraints), relaciones, yteora relativa a la creacin de ndices, y su idoneidad.

    Conocer como realizar consultas a las tablas de la base de datos, clusulas de las sentencias,agrupaciones, joins, etc. Tambin conocer una nueva caracterstica del producto que son lasexpresiones de tablas comunes (CTE). Adems aprender a hacer sentencias de insercin,actualizacin, y borrado.

    Mdulo 3: Programacin de base de datos

    Procedimientos almacenados. Conocers los fundamentos para crear procedimientosalmacenados en la base de datos.

    Triggers. Introduccin al uso de triggers en SQL Server 2005 Express; veremos los triggers"tradicionales" (llamados DML, los que se activan por modificaciones de datos), y tambinveremos los nuevos triggers que se activan por cambio en el esquema de base de datos(DDL).

    Funciones definidas de usuario. Veremos como crear UDFs, y los tipos de funciones definidasde usuario que existen.

    Mdulo 4: Conceptos avanzados

    Conceptos de seguridad de objetos, esquemas, y credenciales de inicio de sesin. Seintroducir el nuevo paradigma de seguridad basado en esquemas.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    2/10

    2

    Trasaccionalidad y niveles de aislamiento. Se cubrirn los niveles de aislamiento y cmo SQLServer 2005 garantiza la atomicidad, consistencia, integridad, y durabilidad de lastransacciones.

    Soporte Nativo XML. Conocer en qu consiste el soporte nativo de XML, uso de las columnastipo XML, indexacin, y consultas XQuery.

    Integracin del CLR. Conocer la nueva posibilidad de crear objetos en la base de datosusando cualquier lenguaje .NET como VB.NET, o C#.

    Aunque el tutorial no est escrito para un tipo de audiencia determinada, es recomendable que elalumno tenga conceptos de desarrollo de aplicaciones cliente-servidor, y fundamentos de basesde datos que aunque durante el curso se irn cubriendo en mayor o menor profundidad, ayudarnal alumno a una rpida comprensin de las lecciones.

    En la introduccin del tutorial, se ver cmo instalar el producto y los diferentes proveedores deacceso a datos que se pueden utilizar. En el segundo mdulo, se ver cmo aprovechar laintegracin entre las herramientas de desarrollo de Visual Basic Express con el motor relacional deSQL Server 2005 Express para crear bases de datos, tablas, vistas, y otros objetos. En el tercermdulo, aprender conceptos bsicos sobre procedimientos almacenados, triggers, y UDFs, y parafinalizar el tutorial, aprender otros conceptos relacionados con seguridad, transacciones, yniveles de aislamiento. A su vez, conocer nuevas funcionalidades del producto como soporte

    nativo XML, y la integracin del CLR en el motor relacional de SQL Server 2005.Recuerde que si quiere poner en prctica este curso tiene disponibles una versin sin limitacionesde Visual Basic 2005 Express, que incluye la base de datos SQL Server 2005 Express.

    Que disfrutes del curso!

    Solid Quality Learning University http://www.sqlu.com

    Solid Quality Learning Iberoamericana http://www.SolidQualityLearning.com

    Diseado, y editado por los siguientes mentores de Solid Quality Learning:http://www.SolidQualityLearning.com/aboutUs.aspx:

    Miguel Egea ([email protected])MVP SQL ServerDirector de Servicios Corporativos

    Eladio Rincn ([email protected])MVP SQL ServerDirector de Tecnologas de Bases de Datos

    Eugenio Serrano ([email protected])MVP ASP/ASP.NET

    Antonio Soto ([email protected])MCT, Director de Formacin

    Agradecimientos

    Queremos agradecer a Alfonso Rodrguez, David Carmona, y Lus Mazario de Microsoft Ibricasu soporte y colaboracin durante las fases de diseo y desarrollo de este curso.

    Muchas gracias!!!

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    3/10

    3

    1. Introduccin a SQL Server 2005 ExpressDurante el mdulo, ver cuales los requisitos hardware/software necesarios para instalar SQLServer 2005 Express, y cmo realizar la instalacin del producto. Se introducir al alumnobrevemente los componentes del producto, enfocado en las necesidades del desarrollador desoftware. A su vez se ver cmo se integra SQL Server 2005 Express con las herramientas de

    desarrollo de las ediciones Express. Para finalizar se presentarn los drivers de acceso a datos quese usarn para conectar a SQL Server 2005 Express.

    1.1. Instalacin de SQL Server 2005 Express y sus componentesEn esta leccin, conocer los requisitos para instalar SQL Server 2005 Express; adems, ver lasdiferentes opciones disponibles durante la instalacin asistida. A continuacin se le introducir loscomponentes instalados, explicndose su funcionalidad. Para finalizar la leccin se hablar deotros componentes disponibles con el producto como cdigo y bases de datos de ejemplo, ydocumentacin del producto (Libros en pantalla).

    1.1.1. Requisitos del sistemaLa instalacin del SQL Server 2005 Express tiene los siguientes requerimientos:

    - Requisitosprevios desoftware

    - Microsoft .NET Framework- SP1 de Microsoft Internet Explorer 6.0 o posterior

    - RAM - Mnimo: 192 MB- Recomendado: 512 MB o ms

    - Espacio en eldisco duro

    - 600 MB de espacio libre- Procesador - Compatible con Pentium III o superior- Mnimo: 500 MHz

    - Recomendado: 1 GHz o ms

    - Sistemaoperativo

    - Windows Server 2003 Standard Edition, Enterprise Edition,Datacenter Edition

    - Windows XP Professional, Home Edition (SP2 o posterior)- Windows 2000 Professional, Server, Advanced Server, Datacenter

    Server (SP4 o posterior)

    1.1.2. Proceso de instalacinLa instalacin de SQL Server 2005 Express se puede realizar de dos formas:

    1.1.2.1. Como parte de la instalacin de algn producto Express.Si se instala como parte de la instalacin de algn producto Express (por ejemplo Visual

    Basic Express), el proceso de instalacin le pedir si desea incluir SQL Server 2005 Expressen la instalacin: en la imagen puede ver la ventana en la que se le solicita la opcin (lainstalacin por defecto no incluye instalar SQL Server 2005 Express).

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    4/10

    4

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    5/10

    5

    1.1.2.2. Como instalacin independiente.Si se instala de forma independiente, el proceso de instalacin requiere los siguientespasos:

    El primer paso de la instalacin consiste en instalar Microsoft .NET Framework 2.0 que esuno de los requisitos de la instalacin; si ya est instalado previo al proceso de instalacin,este paso ser omitido. La actualizacin desde versiones anteriores de .NET Framework

    est soportada hasta la versin 1.1, en caso de haber instalado una versin posterior,deber desinstalarla antes de instalar SQL Server 2005 Express; en otras palabras, laactualizacin se puede realizar slo desde versiones soportadas de .NET Framework.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    6/10

    6

    Ventana de condiciones de EULA; aceptar los trminos de la licencia y condiciones y pulsarSiguiente.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    7/10

    7

    Ventana de bienvenida de instalacin de los prerrequisitos necesarios para SQL Server2005 Express; pulsar Instalar.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    8/109

    8

    Ventana de finalizacin de instalacin de los prerrequisitos; pulsar Siguiente.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    9/10

    9

    Ventana de bienvenida al asistente de instalacin de SQL Server 2005 Express; pulsarSiguiente.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    10/1

    10

    Ventana de comprobacin de requerimientos del sistema; si la comprobacin ha sidosatisfactoria, todas las opciones aparecern con la opcin de verificacin en color verde, encaso de haber algn requerimiento no severo, aparecer en color amarillo; si hay algnrequerimiento crtico que no se cumple, aparecer en color rojo y no podr seguirse con elproceso de instalacin. Pulsando en el botn Report, podr ver cuales son los requisitos nocumplidos para poder preparar al sistema para cumplirlos; por ejemplo, si no se cumplenlos requerimientos de ASP.NET, podr salir de la instalacin, actualizar ASP.NET, y volver a

    realizar la instalacin. Si la comprobacin ha sido satisfactoria, pulse Siguiente.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    11/1

    11

    Introduzca la informacin de registro, desmarque la opcin Ocultar opciones avanzadas deconfiguracin, y pulse Siguiente.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    12/1

    12

    Seleccione los componentes que desea instalar; en ste caso, seleccione instalar todos loscomponentes y pulse Siguiente.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    13/1

    13

    Seleccione el nombre de la instancia de SQL Server 2005 Express (por defectoSQLExpress), y pulse Siguiente.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    14/1

    14

    Seleccione el nombre de la cuenta que arrancar el servidor de SQL Server 2005 Express(Network Service por defecto), y habilite que el servicio de SQL Server se arranque alfinalizar la instalacin; a continuacin pulse Siguiente.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    15/1

    15

    Seleccione el modo de autenticacin (por defecto autenticacin integrada de Windows), ypulse Siguiente.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    16/1

    16

    Seleccione el collation de la instancia de SQL Server. Como es una instalacin nueva, y nose va a trabajar con bases de datos de versiones anteriores de SQL Server, se seleccionarLatin1_General, en caso de migraciones o posibilidad de trabajar con bases de datosimportadas de SQL Server 2000 (o MSDE 2000), considere la opcin por defecto (SQLCollations, Dictionary-order, case insensitive, for use with 1252 Character Set); acontinuacin pulse Siguiente.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    17/1

    17

    Seleccionar la opcin de configuracin de la instancia de SQL Server sobre la posibilidad depermitir a usuarios no-administradores de crear instancias. Por defecto habilitado; durantelas siguientes lecciones se hablar de ello, habiltelo y pulse Siguiente.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    18/10

    18

    Opciones para informar a Microsoft sobre los errores no esperados sucedidos en laaplicacin, y para enviar automticamente informacin sobre las caractersticas usadas delproducto; por defecto estn deshabilitadas, pero se recomienda habilitarla para mejorar elproducto enviando automticamente informacin del uso que se hace del producto; acontinuacin se pulsa en Siguiente.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    19/1

    19

    Comienza el proceso de instalacin informando de las caractersticas que se van instalando.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    20/1

    20

    Finalizacin del proceso de instalacin con estado de casa funcionalidad instalada; en casode haber algn error durante la instalacin, aparecern botones en color Rojo indicando elerror; pulsando en la casilla correspondiente de la columna Status, podr ver informacindel error producido; pulse Siguiente.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    21/1

    21

    Informe final de la instalacin de SQL Server en el que se podr ver todas lascaractersticas instaladas, y un fichero de resumen con cada paso realizado durante lainstalacin. Pulse Finalizar, y ya est preparado para poder utilizar SQL Server 2005Express.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    22/1

    22

    1.1.3. Componentes instaladosPara acceder a los componentes instalados en SQL Server 2005 Express, deber hacer click enInicio, Todos los Programas, Microsoft SQL Server 2005, Herramientas deconfiguracincomo ve en la siguiente imagen:

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    23/1

    23

    Las opciones disponibles son las siguientes:

    1.1.3.1. Administrador de configuracinComponente basado en Microsoft Management Console (MMC), con el que se puedeadministrar la configuracin de los servicios SQL Server, protocolos de red utilizados, yconfigurar el cliente nativo de acceso a SQL Server. Es una herramienta que realiza todaslas modificaciones haciendo uso de las nuevas APIs de administracin SMO (sustituto de

    SQL-DMO). El hecho de usar tales APIs nos da la posibilidad de poder crear aplicacionespersonalizadas para configurar el servidor; por ejemplo, se podra crear una aplicacinbasada en SMO que implemente o extienda las funcionalidades expuestas a travs de laaplicacin MMC. La aplicacin tiene la siguiente apariencia:

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    24/1

    24

    Al igual que desde el administrador de servicios del sistema operativo, se pueden cambiarlas propiedades del servicio; la gran diferencia, es que mientras las llamadas de laaplicacin MMC de los servicios realiza llamadas a las APIs del Kernel de Windows, elAdministrador de Configuracin, realiza las llamadas a travs de las APIs de SMO.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    25/1

    25

    Se pueden configurar, habilitar o deshabilitar protocolos; configurar, o modificar puertosTCP/IP como se ve en la imagen:

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    26/1

    26

    As como establecer el orden de los protocolos de Red; en el siguiente ejemplo, estnhabilitados los protocolos Shared Memory, TCP/IP, y Named Pipes, mientras que elprotocolo VIAest deshabilitado:

    Nota:Recuerde que la mayora de estos cambios no tendrn efecto hasta que el serviciode SQL Server haya sido reiniciado.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    27/1

    27

    1.1.3.2. Informes de uso y errores de SQL ServerLa utilidad permite modificar las opciones de configuracin relativas al feedback que seenva a Microsoft en cuanto al uso de las caractersticas del producto, e informe de erroresno esperados. El nivel de detalle llega hasta el nivel de instancia, es decir, podemos decidirqu instancias envan informacin sobre los errores no esperados, o sobre el uso de lasfuncionalidades del producto:

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    28/10

    28

    1.1.3.3. Configuracin de superficie de SQL ServerEl aplicativo configuracin de superficie de SQL Server es un asistente que ayuda aconfigurar cuales son las partes de SQL Server que se encuentran expuestas ainteractuacin desde el exterior. La filosofa del aplicativo es ayudar a configurar de manerasencilla y rpida los puntos de acceso al servidor. El aplicativo expone al usuariofuncionalidades tales como configuracin de servicios, y configuracin de caractersticas deSQL Server; por ejemplo, CLR habilitado o no, soporte HTTP habilitado o no, endpoints

    configurados en el servidor, etc.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    29/1

    29

    El aplicativo permite modificar la configuracin del servicio de SQL Server.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    30/1

    30

    Tambin permite configurar el tipo de conexiones permitida sobre el servidor. Por ejemplo,SQL Server 2005 Express permite por defecto slo conexiones locales; esto quiere decirque no se pueden realizar conexiones desde equipos externos a menos que se configure deservidor para permitirlo. Desde la aplicacin, se podr habilitar la posibilidad de conexionesde equipos remotos, y los protocolos de conexin permitidos.

    En cuanto a las opciones de configuracin de funcionalidades del motor de base de datos,se incluyen:

    Posibilidad de habilitar o deshabilitar la ejecucin de consultas con OPENROWSET yOPENDATASOURCE: lo que estas funciones permiten es realizar consultas a servidoresremotos (servidores expuestos a travs de un origen de datos del que se provea driversde acceso como ODBC, OLEDB, etc.) sin la necesidad de tener que crear un servidorvinculado.

    Habilitar el soporte del CLR: creacin de objetos de base de datos con cualquierlenguaje .NET Framework.

    Habilitar el soporte nativo de Servicios Web: opcin slo disponible en la versinEnterprise de SQL Server 2005 que permite exponer SQL Server 2005 sin necesidad deimplementar Servicios Web expuestos por IIS.

    Habilitar el uso de Automatizacin OLE con sentencias T-SQL: posibilidad de realizarllamadas a objetos COM desde Transact-SQL con los procedimientos almacenados de

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    31/1

    31

    sistema sp_OACreate, sp_OAGetProperty, sp_OASetProperty, sp_OAMethod,sp_OAStop, y sp_OADestroy. Automatizacin OLE entrar en desuso debido a laintegracin del CLR y su consiguiente facilidad para implementarlo mediante .NETFramework en lugar de objetos COM.

    Habilitar el uso del procedimiento almacenado de sistema xp_cmdshell que permiteejecutar comandos de sistema en el servidor (tales como DIR, DELETE, COPY, etc.)

    Habilitar el uso de endpoints de Service Broker.

    1.1.3.4. SQLCMDSQL Server 2005 Express no incluye la herramienta SQL Server Management Studio comoel resto de versiones de SQL Server 2005. Para poder conectarse a SQL Server, el productoincluye una utilidad de lnea de comando que permite conectarse a una instancia de SQLServer y realizar operaciones de manera similar a las herramientas grficas.Evidentemente, la funcionalidad que nos proveen Management Studio no puede seralcanzada con la utilidad de lnea de comando, pero si provee lo necesario para conectarsee interactuar con la instancia. Tpicamente esta utilidad suele ser utilizada para realizartareas administrativas bsicas. Por ejemplo, un ISV que desarrolla una aplicacin ynecesita ejecutar un script contra la instancia de SQL Server; imagnese que el ISV no hadesarrollado sus propias herramientas para ejecutar consultas ad-hoc contra el servidor; eneste caso, puede utilizar SQLCMD para conectarse a la instancia de SQL Server y ejecutarel script deseado. Incluso, el ISV tiene la posibilidad de crear el script con SQL Server

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    32/1

    32

    Management Studio en sus equipos de desarrollo porque Management Studio incorpora laposibilidad de ejecutar scripts en modo SQLCMD.

    La documentacin del SQLCMD la puede encontrar en los Libros en Pantalla en "SQL Server2005 Express Edition", "Working with SQL Server Express", "Using the sqlcmd Utility (SQLServer Express)".

    La funcionalidad ms novedosa implementada en SQLCMD es la posibilidad de utilizar

    variables a la hora de ejecutar scripts; por ejemplo:Dado el siguiente script llamado copia.sql:

    BACKUP DATABASE $(db) TO DISK = "$(path)\$(db).bak" WITH INIT

    donde $(db) es una variable que referenciar a un nombre de base de datos, y $(path) laruta donde se guardar la copia.

    Si se ejecuta desde lnea de comando

    SQLCMD -ic:\copia.sql -vdb="AdventureWorks" path="c:\data"

    lo que SQLCMD ejecutar ser:

    BACKUP DATABASE AdventureWorksTO DISK = "c:\data\AdventureWorks.bak"WITH INIT

    lo cual quera decir que con un script de copia de seguridad, se podran reutilizar conbastante facilidad distintas estrategias de copia de seguridad. Esto est muy bien, pero selimita la capacidad a la instancia en uso. Sin embargo, SQLCMD tambin permite cambiarde conexin tras haber conectado a un servidor con la palabra clave :connect; por ejemplo:

    desde lnea de comando, se conecta a una instancia de la siguiente manera:

    SQLCMD -E -S(local)\SQLEXPRESS

    A continuacin aparece el prompt, y puede ejecutar lo siguiente:

    :connect (local)\SQLEXPRESS_2

    que conectara a una segunda instancia de SQL Server 2005. Otras opciones disponibles

    son :r para ejecutar un script, y :setvar para definir variables, por lo que el ejemploanterior del backup se podra ejecutar de la siguiente forma:

    SQLCMD -E -S(local)\SQLEXPRESS:setvar db AdventureWorks:setvar path c:\data:r c:\copia.sqlGO

    1.1.4. Componentes opcionalesLas bases de datos de ejemplo y el cdigo de ejemplo son un buen comienzo para conocer lasnuevas funcionalidades del producto. La base de datos AdventureWorks se ha creado para

    sustituir a las anteriores Northwind, y Pubs que pecaban de ser bases de datos poco reales encuanto a volumen de datos. Se ha tenido ms cuidado en el diseo relacional de la base dedatos AdventureWorks, y se ha aprovechado para incluir nuevas funcionalidades como soporteXML, novedades Transact-SQL, nuevos tipos de datos, etc.

    La otra fuente de conocimiento a mencionar son los Libros en Pantalla (BOL): la versinincluida en SQL Server 2005 Express es una versin "reducida" de la versin completa, peroen todo momento, da acceso a la Web de Microsoft para acceder a documentacin y ayudaincluida en la versin completa de los Libros en Pantalla. A su vez, los Libros en Pantalla,incluyen la posibilidad de acceder directamente a los grupos de noticias para obtener

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    33/1

    33

    respuesta a casos concretos, y tambin realizar bsquedas en sitios de la comunidad comoCodeZone, ElGuille.info, GotDotNet.com, SSUG.com, SQLIS.com, etc.

    1.2. Integracin con versiones ExpressEn esta leccin, conocer cmo se integran la versin Express de SQL Server con Visual Studio, ycmo ayuda la versin Express de SQL Server en el proceso de despliegue de aplicaciones debases de datos. Se le introducir a nuevos conceptos como instancias de nombre para no-administradores, y se le ensear a desplegar aplicaciones de bases de datos con la versinExpress de SQL Server 2005.

    Uno de los objetivos de la versin Express de SQL Server 2005, es simplificar el proceso dedespliegue de aplicaciones de bases de datos; a diferencia del resto de versiones de SQL Server(Workgroup, Standard, Enterprise) en el que las bases de datos se cambian de lugar poco o casinunca, la versin Express est pensada para aplicaciones de bases de datos que requieren encierto modo que los ficheros de base de datos sean dinmicos. Esta movilidad de los ficheros seconsigue durante la fase de despliegue.

    En qu ayuda al despliegue la versin Express? Los Vendedores de Software Independientes(ISVs) generalmente desarrollan aplicaciones comerciales que requieren de un instalable, y a su

    vez requieren instalar una base de datos; La versin Express viene a solucionar los problemas quesurgan en el proceso de instalacin en este tipo de aplicaciones.

    1.2.1. Compatibilidad con versiones "mayores" de SQL ServerLa versin Express de SQL Server se pone en la lnea de las versiones MSDE de anterioresversiones de SQL Server; esto quiere decir que una base de datos de SQL Server 2005 para laversin Express, es totalmente compatible con el resto de versiones de SQL Server(Workgroup, Standard, Enterprise). El proceso de migracin entre versiones es tan sencillocomo hacer una restauracin de la copia de seguridad de la base de datos (comandoRESTORE, o usando las herramientas grficas), o usando la opcin de adjuntar bases de datos(comando sp_attach_db, o con las herramientas grficas).

    1.2.2. Instancias de nombre para usuarios no-administradoresUno de los problemas que tienen los ISVs que distribuyen aplicaciones con MSDE es que elusuario que realiza la instalacin de la aplicacin debe pertenecer al rol de administradores deSQL Server. Este es un requisito que en la versin Express de SQL Server 2005 se elimina conla aparicin de las instancias de usuario.

    El objetivo de las instancias de usuario, es acercar a SQL Server al concepto de base de datosde escritorio; es una base de datos que slo admite conexiones locales a travs del protocolode red "named pipes", no se pueden realizar conexiones a travs de la red. El concepto de lasinstancias de usuario es similar al modelo de las bases de datos Access: una vez conectado alfichero de base de datos, el usuario tiene derechos administrativos sobre la base de datos, sinnecesidad de la intervencin de un usuario administrador.

    1.2.2.1. Cmo funciona?En primer lugar, para habilitar el uso de instancias de usuario, en la cadena de conexin dela aplicacin cliente debers aadir la cadena "User Instance=true". De esta forma seindica a SQL Server Express, que la conexin se realizar sobre una instancia de usuario.

    En caso de que no existiera la instancia de usuario, SQL Server automticamente, crear lainstancia de usuario; consiste en crear una nueva instancia de SQL Server para el usuariorequerido, en el que:

    Se copiarn las bases de datos de sistema de la instancia por defecto de SQL Server2005 Express, y

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    34/1

    34

    Se iniciar otra "copia" del servicio de SQL Server Express; el nombre de la instancia esun valor aleatorio, por ejemplo (2E67C75A-1693-4D), y se debe considerar a la nuevainstancia hija de la instancia principal de SQL Server Express.

    Nota: Conectndose a la instancia \SQLEXPRESS, con la vista sys.dm_os_child_instancesse pueden consultar cuales son las instancias de usuario activas.

    La diferencia fundamental con las instancias tradicionales es que a la instancia de

    usuario solamente puede conectar el usuario para el que se ha creado la instancia.Adems, por diseo, slo se puede conectar mediante canalizacin por nombres, y no sepuede conectar a la instancia de forma remota.

    Despus de crear o iniciar la instancia de SQL Server Express, automticamente, el procesode conexin se encargar de adjuntar la base de datos que se ha especificado en la cadenade conexin a la instancia recin creada.

    A su vez, cuando la aplicacin cliente cierra conexin con la base de datos, la base de datosse "desadjunta" de la instancia de SQL Server. En realidad, SQL Server tiene configuradoun tiempo de espera antes de desadjuntar la base de datos de la instancia porque en casocontrario, el proceso de adjuntar/ desadjuntar podra causar problemas de rendimiento enla aplicacin.

    Un ejemplo de cadena de conexin que deber usarse para trabajar con instancias deusuario podra ser el siguiente:

    conn string ="Data Source=.\\SQLExpress;" +"Integrated Security=true;" +"attachdbfilename=|DataDirectory|\\mi_bd.mdf;" +"User Instance=true;"

    En .NET 2.0, aparece la palabra clave |DataDirectory|, que representa un path relativo ala instalacin de la aplicacin; por ejemplo, distribuimos una aplicacin que admitepersonalizar la ruta de instalacin, con |DataDirectory| podemos especificar rutas relativas.

    A su vez, tambin se puede especificar el valor de DataDirectory de la siguiente manera:

    AppDomain.CurrentDomain.setData(DataDirectory,C:\ruta_por_defecto\);

    1.2.3. Consideraciones Como la instancia de usuario es hija de la instancia SQLEXPRESS, si la instancia

    SQLEXPRESS no est arrancada, la instancia de usuario no arrancar.

    Un usuario slo puede tener una instancia de usuario. Las bases de datos de la instancia de usuario se crean en la ruta: \Documents and

    Settings\nombre_usuario\Local Settings\Application Data\Microsoft\Microsoft SQLServer Data\SQLEXPRESS

    La rplica se deshabilita. La instancia de usuario no admite Autenticacin de SQL Server. Slo se admite laAutenticacin de Windows. La compatibilidad de protocolo de red con las instancias de usuario slo es posible

    mediante canalizaciones con nombre locales.

    La instancia de usuario comparte las entradas de registro de la instancia primaria. No se admiten instancias de usuario con cdigo nativo. Esta caracterstica slo se

    admite con ADO .NET.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    35/1

    35

    1.2.4. Despliegue de la aplicacinEl objetivo principal de las instancias de usuario, es disponer de un fichero de base de datos,que se utiliza en una instancia cuando el usuario necesita acceder a la base de datos. Cuandono se est usando, la base de datos se desadjunta. Qu se consigue con esto? Acercar la basede datos al concepto de base de datos de escritorio (como si fuera Access). De esta forma, eldespliegue de la aplicacin relacionada con la base de datos consistir en:

    Copiar los binarios de la aplicacin. Copiar el fichero de base de datos.Nota. Fjate que slo hay que copiar el fichero de base de datos; no se necesita adjuntar labase de datos a ninguna instancia de SQL Server, porque la propia aplicacin se encarga dehacerlo por nosotros.

    Por lo tanto, para desplegar la aplicacin deberemos incluir en la distribucin la copia de labase de datos de la aplicacin. Para ello lo podremos hacer de dos formas:

    Usar el concepto de XCOPY copiando el contenido del directorio \bin\release de laaplicacin generada en el directorio destino.

    Usar la nueva tecnologa ClickOnce, cuyo objetivo es facilitar el despliegue de la aplicacin,y a su vez, gestionar las actualizaciones; en el proceso de instalacin, adems de larealizar la propia instalacin, se podr configurar la aplicacin para actualizarautomticamente la aplicacin cuando existan nuevas versiones.

    1.3. Acceso a datosSin lugar a dudas uno de los mbitos ms importantes de un lenguaje o entorno de programacines su capacidad de acceso a datos. Prcticamente todas las aplicaciones conllevan la realizacinde accesos a datos.

    Le gustar saber que la plataforma .NET, y por lo tanto ASP.NET, ofrecen un potente modelo deacceso a fuentes de datos. Se le conoce con el nombre genrico de ADO.NET.

    Nota: No se deje engaar por el nombre: ADO.NET no tiene casi nada que ver con el anteriorADO utilizado en los tiempos de ActiveX y COM. S, dispone de conexiones, comandos e inclusouna clase que recuerda a los Recordset, pero crame cuando le digo que es mejor que se olvide

    para siempre de todos ellos. Tanto la filosofa de trabajo como la tecnologa son diferentes porcompleto y es mejor que utilice una estrategia de "ojos limpios" para acercarse correctamente a lanueva tecnologa.

    Los conocimientos adquiridos en este mdulo le servirn para cualquier tipo de desarrollo con.NET, no slo para aplicaciones Web. Los conceptos explicados son vlidos tambin para cualquierversin de .NET no slo para la 2.0.

    1.3.1. Introduccin a ADO.NETComo cualquier otro modelo de acceso a datos, ADO.NET es un conjunto de clasesrelacionadas entre s que estn especializadas en ofrecer toda la funcionalidad que unprogramador necesita para realizar acceso a datos y manejarlos una vez los ha obtenido.

    Las clases genricas expuestas por ADO.NET se encuentran bajo el espacio de nombresSystem.Data. Este espacio de nombres define clases genricas de acceso a datos queposteriormente son extendidas para ofrecer caractersticas y funciones especficas de cadaproveedor.

    El objeto ms importante a la hora de trabajar con el nuevo modelo de acceso a datos es elDataSet. Sin exagerar demasiado podramos calificarlo casi como un motor de datos

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    36/1

    36

    relacionales en memoria. Aunque hay quien lo asimila a los clsicos Recordsets sufuncionalidad va mucho ms all como se ver en breve.

    1.3.1.1. Arquitectura de ADO.NETEl concepto ms importante que hay que tener claro sobre ADO.NET es su modo defuncionar, que se revela claramente al analizar su arquitectura:

    Figura 4.1.- Arquitectura de ADO.NET

    Existen dos capas fundamentales dentro de su arquitectura: la capa conectada y ladesconectada

    1.3.1.2. La capa conectadaLa capa conectada de ADO.NET contiene objetos especializados en la conexin con losorgenes de datos. As, la clase genrica Connectionse utiliza para establecer conexionesa los orgenes de datos. La clase Commandse encarga de enviar comandos de toda ndoleal origen de datos. Por fin la clase DataReader est especializada en leer los resultados delos comandos.

    La clase DataAdapter hace uso de las tres anteriores para actuar de puente entre la capaconectada y la desconectada como veremos despus.

    Estas clases son abstractas, es decir, no tienen una implementacin real de la que se

    pueda hacer uso directamente. Es en este punto en donde entran en juego losproveedores de datos. Cada origen de datos tiene un modo especial de comunicarse conlos programas que los utilizan, adems de otras particularidades que se deben contemplar.Un proveedor de datos de ADO.NET es una implementacin concreta de las clasesconectadas abstractas que hemos visto, que hereda de stas y que tiene en cuenta yatodas las particularidades del origen de datos en cuestin.

    As, por ejemplo, las clases especficas para acceder a SQL Server se llamanSqlConnection, SqlCommand, SqlDataReadery SqlDataAdaptery se encuentran bajoel espacio de nombres System.Data.SqlClient. Es decir, al contrario que en ADO clsicono hay una nica clase Connectiono Commandque se use en cada caso, si no que existen

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    37/1

    37

    clases especializadas para conectarse y recuperar informacin de cada tipo de origen dedatos.

    Nota: El hecho de utilizar clases concretas para acceso a las fuentes de datos no significaque no sea posible escribir cdigo independiente del origen de datos. Todo lo contrario. La

    plataforma .NET ofrece facilidades de escritura de cdigo genrico basadas en el uso deherencia e implementacin de interfaces. De hecho la versin 2.0 de .NET ofrece grandesnovedades especficamente en este mbito.

    Existen proveedores nativos, que son los que se comunican directamente con el origende datos (por ejemplo el de SQL Server o el de Oracle), yproveedores "puente", que seutilizan para acceder a travs de ODBC u OLEDB cuando no existe un proveedor nativopara un determinado origen de datos.

    Nota: Estos proveedores puente, si bien muy tiles en determinadas circunstancias,ofrecen un rendimiento menor debido a la capa intermedia que estn utilizando (ODBC uOLEDB). Un programador novel puede sentir la tentacin de utilizar siempre el proveedor

    puente para OLEDB y as escribir cdigo compatible con diversos gestores de datos deforma muy sencilla. Se trata de un error y siempre que sea posible es mejor utilizar un

    proveedor nativo.

    La plataforma .NET proporciona "de serie" los siguientes proveedores de acceso a datos.

    Proveedor Espacio de nombres Descripcin

    ODBC .NET DataProvider

    System.Data.OdbcPermite conectar nuestrasaplicaciones a fuentes de datos atravs de ODBC.

    OLE DB .NET DataProvider System.Data.OleDb

    Realiza la conexin utilizando unproveedor OLEDB, al igual que elADO clsico.

    Oracle Client .NET

    Data Provider

    System.Data.OracleClientProveedor de datos para acceder a

    Oracle.

    SQL Server .NETData Provider

    System.Data.SqlClient

    Permite la conexin optimizada aSQL Server 7.0 o posterior,incluyenbdo la ltima versin SQLServer 2005.

    Los proveedores de acceso a datos que distribuye Microsoft en ADO.NET y algunosdesarrollados por otras empresas o terceros, contienen los mismos objetos, aunque losnombres de stos, sus propiedades y mtodos, pueden ser diferentes.

    Existen, por supuesto, proveedores para tipos de orgenes de datos de cualquier gestor dedatos existente en el mercado. stos los desarrolla normalmente la empresa responsable

    del producto. Si bien stos optimizan el acceso a estos orgenes de datos nosotros siemprepodremos realizarlo mediante ODBC u OLEDB si tenemos necesidad.

    En resumen: con la capa conectada de ADO.NET realizamos la conexin y comunicacincon los orgenes de datos. Cada proveedor de datos implementa su propia versin de lasclases Connection, Command, DataReader y DataAdapter(entre otras).

    Las clases derivadas de Connection se utilizan para realizar la conexin y enviar yrecibir informacin.

    Las clases derivadas de Commandpermiten ejecutar sentencias SQL y procedimientosalmacenados en el gestor de datos.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    38/10

    38

    Las clases derivadas de DataReader se emplean para obtener los posibles resultados deun comando utilizando para ello el conducto de comunicacin establecido porConnection.

    1.3.1.3. La capa desconectadaUna vez que ya se han recuperado los datos desde un origen de datos la conexin a ste yano es necesaria. Sin embargo sigue siendo necesario trabajar con los datos obtenidos de

    una manera flexible. Es aqu cuando la capa de datos desconectada entra en juego.Adems, en muchas ocasiones es necesario tratar con datos que no han sido obtenidosdesde un origen de datos relacional con el que se requiera una conexin. A vecesnicamente necesitamos un almacn de datos temporal pero que ofrezca caractersticasavanzadas de gestin y acceso a la informacin.

    Por otra parte las conexiones con las bases de datos son uno de los recursos ms escasoscon los que contamos al desarrollar. Su mala utilizacin es la causa ms frecuente decuellos de botella en las aplicaciones y de que stas no escalen como es debido. Estaafirmacin es especialmente importante en las aplicaciones Web en las que se puedenrecibir muchas solicitudes simultneas de cualquier parte del mundo.

    Finalmente otro motivo por el que es importante el uso de los datos desconectado de suorigen es la transferencia de informacin entre capas de una aplicacin. stas

    pueden encontrarse distribuidas por diferentes equipos, e incluso en diferentes lugares delmundo gracias a Internet. Por ello es necesario disponer de algn modo genrico yeficiente de poder transportar los datos entre diferentes lugares, utilizarlos en cualquierade ellos y posteriormente tener la capacidad de conciliar los cambios realizados sobre elloscon el origen de datos del que proceden. Todo esto y mucho ms es lo que nos otorga eluso de los objetos DataSet, ncleo central de la capa desconectada de ADO.NET.

    Nota: Otra interesante caracterstica de los DataSet es que permiten gestionarsimultneamente diversas tablas (relaciones) de datos, cada una de un origen diferente sies necesario, teniendo en cuenta las restricciones y las relaciones existentes entre ellas.

    Los DataSet, como cualquier otra clase no sellada de .NET, se pueden extender medianteherencia. Ello facilita una tcnica avanzada que consiste en crear tipos nuevos de DataSet

    especializados en la gestin de una informacin concreta (por ejemplo un conjunto detablas relacionadas). Estas nuevas tipos clases se denominan genricamente DataSetTipados, y permiten el acceso mucho ms cmodo a los datos que representan,verificando reglas de negocio, y validaciones de tipos de datos ms estrictas.

    Los objetos DataSet no dependen de proveedor de datos alguno y su funcionamiento esindependiente de cmo hayan sido obtenidos los datos que contienen. Este es el conceptoms importante que debemos recordar.

    El proceso general de trabajo de ADO.NET para acceder a un gestor de datos (SQL Server,por ejemplo) es casi siempre el mismo: se abre una conexin (clase Connection), se lanzauna consulta SQL o procedimiento almacenado mediante un objeto de la clase Command, yse almacenan en memoria los resultados dentro de un objeto DataSet, cerrando laconexin.

    Nota:Aunque este es el comportamiento habitual de una aplicacin de datos existen casosen los que no es recomendable almacenar en memoria (en un DataSet) todos losresultados de una consulta, bien por ser muchos registros o por contener datos muygrandes. En este tipo de casos se puede usar u objeto DataReaderdirectamente para leerla informacin, tratarla y no almacenarla en lugar alguno. De todos modos lo ms frecuentees realizar el proceso descrito.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    39/1

    39

    1.3.1.3.1. Unin entre capa conectada y desconectadaLa clase DataAdapter se ha incluido anteriormente en la capa conectada por que estimplementada por cada proveedor de un modo diferente. En realidad es una clase quepone sus pies en ambos mundos (conectado y sin conexin) y sirve de nexo entre ellos.

    Un DataAdapter sabe como manejar correctamente los objetos proporcionados por suproveedor especfico (fundamentalmente los vistos: Connection, Command y

    DataReader) y proporciona mtodos para trasegar informacin desde el servidor aDataSets desconectados y viceversa haciendo uso de dichos objetos especficos delproveedor.

    As, por ejemplo, el mtodo Fillde un DataSetse utiliza para introducir los resultadosde una consulta dentro de un DataSet para luego trabajar con ellos sin preocuparnos desu origen. Del mismo modo su mtodo Update se utiliza para conciliarautomticamente con el origen de datos los datos modificados en un DataSet mientrasno haba conexin.

    1.3.1.3.2. Otras clases dependientes de DataSetComo hemos dicho antes un DataSetpodra asimilarse a un pequeo gestor de datos enmemoria. Como tal un DataSet permite mantener diversas tablas as como las

    relaciones entre ellas, incluso forzando que se cumplan restricciones de creacin yactualizacin, como en una base de datos "real". Para ello se apoya en el uso de otrasclases especializadas que son las siguientes:

    DataTable: representa una tabla o relacin de datos. Se puede asimilar a una tablade un gestor de datos. Los datos obtenidos de una consulta de tipo SELECT de SQLse almacenan en un objeto de esta clase.

    DataColumn: ofrece informacin sobre cada uno de los campos de los registrosalmacenados en un DataTable, como su nombre o su tipo.

    DataRow: representa un registro de la tabla virtual definida por el DataTable.Contiene tantos elementos como campos tiene la tabla, cada uno del tipo definidopor el objeto DataColumn correspondiente.

    Constraint: las clases Constraintse emplean para definir restricciones en los tiposde datos contenidos en un DataTable. Por ejemplo se puede usar un objeto de estaclase para indicar que un determinado campo debe ser nico o que se trata de unaclave externa que debe ser tenida en cuenta en actualizaciones o borrados encascada.

    DataRelations: define la relacin existente entre dos objetos DataTable.Normalmente se suelen utilizar un identificador comn a ambas tablas aunquepueden ser combinaciones de ms de uno de ellos. De este modo se sabe cmoobtener informacin de una tabla a partir de informacin en otra. Por ejemplo elidentificador de una factura (su nmero, por ejemplo) puede servir para relacionarsu registro con los registros de detalle de factura que estn contenidos en otra tabla.

    DataView: representa una vista concreta de un DataTable. Normalmente se tratade ordenaciones o filtros sobre los datos originales. Todas las tablas disponen deuna vista por defecto (propiedad DefaultView) que ofrece los datos tal y como sehan introducido en sta y es la vista que se usa habitualmente.

    1.3.1.4. Vinculacin de datos a controles WebOtra caracterstica fundamental de ASP.NET que lo convierte en una herramienta ventajosapara el desarrollo de aplicaciones Web es la capacidad de vincular datos a controles Web.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    40/1

    40

    La mayor parte de los controles que podemos arrastrar sobre una pgina ASPX se puedenvincular a los objetos DataSet, DataTable y DataReader o a informaciones concretascontenidas en stos.

    Ello facilita mucho el trabajo con datos desde la interfaz de usuario ya que no hay quemolestarse en generar tablas con ellos, escribir JavaScript o proporcionar complejos mediospropios para permitir su edicin o navegacin si hacemos un uso adecuado de lavinculacin y los controles disponibles.

    Todo ello, gracias a ASP.NET y Visual Studio, equipara en muchos aspectos el desarrolloWeb al clsico desarrollo de aplicaciones de escritorio donde este tipo de facilidades hanestado disponibles desde hace aos. Sin embargo en una aplicacin Web donde no existeuna conexin permanente disponible entre la visualizacin (navegador) y el lugar en el quese ejecuta el cdigo no es algo fcil de conseguir. El uso de un modelo consistente comoADO.NET (idntico en Web, escritorio y otros entornos) junto con las capacidades nativasde ASP.NET para abstraernos de estas dificultades (ViewState, Postback...) consiguen el"milagro".

    En este mdulo veremos tambin lo sencillo que resulta crear interfaces para explotar losdatos desde una pgina Web.

    1.3.2. Acceso a datos manualTras haber aprendido un poco de teora sobre ADO.NET a continuacin explicaremos cmo seutilizan las clases de acceso datos para escribir cdigo de acceso a datos de manera manual.

    Si bien es un tema algo rido y adems en un gran porcentaje de los casos utilizaremosherramientas que nos faciliten la creacin automtica de cdigo, es fundamental conocer laforma de trabajar sin ayuda para entender el funcionamiento real de los objetos de datos.

    1.3.2.1. Escritura manual de cdigoEn este apartado vamos a analizar cmo es el cdigo necesario para recuperar y actualizardatos con ADO.NET. Posteriormente veremos como sacar partido a las facilidades delentorno de desarrollo Visual Studio 2005 para no tener que escribir el cdigo a mano. Sinembargo es til aprender a hacerlo de esta manera para entender bien su funcionamiento.

    1.3.2.1.1. Comandos de seleccin simplesLa mayor parte de las consultas que se lanzan contra una base de datos suelenutilizarse para obtener un conjunto de registros para tratar. Este tipo de consultassuelen ser expresiones SQL de tipo SELECT. El siguiente fragmento de cdigo muestralos pasos necesarios para mostrar en una pgina los registros resultantes de unaconsulta:

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    41/1

    41

    No se trata de un cdigo optimizado (es ms bien burdo) pero nos ayudar a entenderperfectamente el proceso. Los datos los obtendremos de la conocida base de datos deejemplo Northwind (que viene con todas las versiones de SQL Server).

    Nota: Para poder escribir cdigo de acceso a datos en nuestro mdulo debemosagregar referencias a los espacios de nombres que contienen las clases que vamos autilizar. Para ello usamos las dos sentencias Imports siguientes:

    La primera de ellas agrega las clases genricas de acceso a datos (como DataSet) y la

    siguiente las especficas de SQL Server. Si no lo hacemos recibiremos un error.

    Lo primero que se debe hacer es instanciar un objeto que represente la conexin a labase de datos. Dado que nos estamos conectando a SQL Server esta conexin ser deltipo SqlConnection. Es lo que se hace en la primera lnea del cdigo anterior. Laconexin debe realizarse con un servidor de datos y un esquema de datos concreto.Esto se indica mediante la cadena de conexin (al igual que se haca en ADOtradicional). En este caso la cadena de conexin es la tpica de SQL Server. Cada gestorde datos tiene la suya y hay que construirla de manera adecuada. El entorno dedesarrollo Visual Studio 2005 nos ayuda a crearlas como veremos luego.

    Una vez creado el objeto con el que nos conectaremos hay que definir el comando alanzar a la base de datos. Para ello se utiliza un objeto SqlCommand. Las propiedades

    bsicas que hay que establecer para ste son la consulta que se lanzar (propiedadCommandText) y la conexin que se emplear para lanzarla (propiedad Connection)que es lo que se refleja en las lneas 6 y 7.

    Ahora que ya sabemos cmo nos conectaremos y qu queremos obtener debemoslanzar la consulta y recoger el resultado de alguna manera.

    La clase Commanddispone de diversos mtodos para ejecutar consultas:

    ExecuteReader: este mtodo lanza la consulta a la base de datos y devuelve unareferencia a una instancia de la clase DataReader (SqlDataReader en el caso de SQLServer). Podemos utilizar el DataReaderpara recorrer los datos y procesarlos.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    42/1

    42

    ExecuteNonQuery: ejecuta la consulta sin devolver resultado alguno. Simplementeenva la consulta al servidor y devuelve el nmero de registros afectados por sta.til para realizar consultas de insercin (INSERT), actualizacin (UPDATE) y borrado(DELETE).

    ExecuteScalar: lanza la consulta y devuelve un objeto con el valor del primercampo del primer registro que se obtenga de dicha consulta. Es til para lanzarconsultas de agregacin como sumas (SUM), cuentas (SELECT COUNT * ....) y

    similares de las que slo necesitamos un valor como resultado.En el ejemplo hemos utilizado el primer mtodo ya que requerimos que devuelva variosregistros con diferentes campos. Entonces lo que hacemos es (lneas a partir de la 9):

    1. Abrir la conexin.2. Crear una variable para contener una referencia a un objeto de la clase DataReader

    que es el que nos permitir acceder a los resultados. Fjese en que no se puedeinstanciar un DataReader (la declaracin no lleva la palabra clave New).

    3. Se obtiene el resultado mediante el mtodo ExecuteReader, recogindolo en lavariable (dr) recin declarada.

    4. Se procesan los resultados (lneas 14-18).5. Se cierra la conexin.El objeto DataReader es asimilable a un cursor de servidor de slo lectura y haciaadelante (conocidos como de manguera de bombero o firehose). Es decir, los datosdevueltos por el DataReader slo se pueden leer y no actualizar. Adems de esto slose pueden leer en secuencia hacia adelante (no hay forma de regresar sobre loandado).

    La propiedad HasRowsnos indica si hay o no resultados devueltos. El mtodo Readavanza una posicin en los registros devolviendo True si quedan registros pendientes deleer. Con esta informacin es muy fcil entender las lneas 14 a 18.

    1.3.2.1.2. La clusula UsingQu ocurre si se produce un error durante el procesamiento del bucle anterior en elque se trata el DataReader? La respuesta es que la conexin, que debemos tenerabierta durante el procesamiento, no se cerrar pues el cdigo no llega al final.

    Esto es algo muy grave ya que las conexiones que no se cierran no se pueden reutilizary por lo tanto puede llegar un momento en que no tengamos conexiones disponibles, loque limita enormemente la escalabilidad del sistema.

    Podemos evitar el problema escribiendo:

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    43/1

    43

    De este modo, con la clusula Finally nos aseguramos que siempre se va a cerrar laconexin.

    De todos modos escribir este cdigo es algo tedioso sobre todo si queremos que laexcepcin se replique y slo metemos la clusula Finally por el hecho de cerrar laconexin.

    Para facilitar el trabajo VB.NET en .NET 2.0 incluye una clusula especial denominadaUsing que habilita la destruccin automtica de los objetos a los que se hacereferencia. As el cdigo anterior quedara simplemente:

    Al terminar la clusula Using (aunque haya un error por medio) se llama de maneraautomtica al mtodo Disposedel objeto utilizado (en este caso una conexin). Entreotras cosas este mtodo se encarga de cerrar el objeto si estaba abierto, por lo que nonos tendremos que preocupar de este aspecto.

    1.3.2.1.3. Grupos de registrosAunque los DataReader se asemejan al funcionamiento de un cursor firehose, enrealidad difieren bastante de stos. Imaginemos que conectamos con la base de datosen el ejemplo anterior y, mientras estamos procesando el bucle de los registros, seinterrumpe la conexin a la base de datos por el motivo que sea.

    En principio en el caso de un cursor firehose tradicional obtendramos un error porquese ha roto la conexin con el servidor. En el caso de un DataReader es posible quesigamos ejecutando varias vueltas ms del bucle sin problemas. Esto se debe a que, en

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    44/1

    44

    realidad, el DataReader obtiene los registros en grupos a travs de la conexin y vasolicitando nuevos grupos a medida que los necesita.

    Es algo que hay que tener en cuenta a la hora de utilizarlos.

    1.3.2.1.4. Ventajas e inconvenientesEl cdigo anterior, aunque sencillo, es un poco lioso y el uso de los DataReader estalgo limitado dada su idiosincrasia (de slo lectura y hacia adelante). Este cdigo es

    adecuado si no necesitamos almacenar los resultados de la consulta en memoria niregresar sobre ellos una vez procesados una primera vez. Tambin es muy til paraobtener resultados con miles o millones de registros que queremos tratarsecuencialmente pero no almacenar en memoria.

    Sin embargo para un uso cotidiano se trata de un cdigo muy poco til y complicado deutilizar salvo para cosas muy sencillas. Adems slo hemos utilizado clases de la capaconectada de ADO.NET. Todava debemos aprender a obtener los resultados dentro deun DataSet para su explotacin de manera cmoda. Hay que tender un puente entreambos mundos (conectado y desconectado): el DataAdapter.

    1.3.2.2. DataAdapter: puente entre mundosSi lo que deseamos es poder almacena temporalmente en memoria los datos obtenidos de

    una consulta debemos recurrir al uso de objetos de la clase DataSet. Como sabemos setrata de un almacenamiento en memoria desvinculado por completo del origen de losdatos.

    Si el ejemplo anterior lo modificamos para convertirlo en una funcin que nos devuelva unDataSet con los datos obtenidos a partir de la consulta, el resultado sera similar a este:

    La primera parte del cdigo es como la anterior. Se crean una conexin y un comando. Loque difiere bastante es la segunda parte. Hay varias diferencias importantes:

    1. Ya no aparece en el cdigo objeto DataReaderde tipo alguno.2. No se abre ni se cierra la conexin a la base de datos.3. Se crea un nuevo DataSety aparece un objeto de la clase DataAdapter.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    45/1

    45

    Un DataAdapter es una clase que conoce las particularidades de la capa conectada de undeterminado proveedor y es capaz de "comunicar" informacin entre sta y la capadesconectada formada por los DataSet.

    El mtodo Fillde un DataAdapter se encarga e rellenar un DataSet con los datos obtenidosa partir de una consulta (o procedimiento almacenado) definida a travs de un comando.Su propiedad SelectCommandse usa para indicar qu comando se utilizar para rellenarel DataSet.

    Internamente el mtodo Fill emplea el objeto DataReader devuelto por ExecuteReader yrellena el DataSet con l por lo que sera factible crear un cdigo equivalente. Sin embargoes muy cmodo y nos evita problemas y el tener que "reinventar la rueda" en cadaproyecto.

    1.3.2.2.1. El objeto DataSetLos objetos DataSet contienen a su vez objetos DataTable que son los que contienenrealmente los datos. Para acceder a las tablas de un DataSet se utiliza su coleccinTables. Se puede acceder a las tablas por posicin (nmeros enteros) o por nombre si losabemos.

    En un ejemplo sencillo como el anterior (y por otro lado uno de los ms comunes) se

    crea una nica tabla en el DataSet de nombre "Table1" y posicin 0.Las tablas contienen dos colecciones interesantes:

    Columns: conjunto de objetos de tipo DataColumn que ofrecen informacin sobrelos campos de la tabla (nombre, tipo, longitud...).

    Rows: coleccin de objetos de la clase DataRowque contienen informacin concretasobre cada campo de un registro de la base de datos.

    Con esta informacin resulta muy sencillo tratar los datos de una consulta. Podemosacceder directamente a cualquier registro de la tabla usando su posicin en la coleccinde filas. Por ejemplo para acceder al quinto registro de una tabla basta con escribir:

    Dim dr As DataRowDr = ds.Tables(0).Rows(4)

    (ntese que las colecciones comienzan a numerarse en 0, de ah que el quinto registrotenga ndice 4).

    Podemos acceder a cualquier campo del registro usando su posicin o bien su nombre,as:

    ds.Tables(0).Rows(4)("CompanyName")

    que devolver un objeto del tipo adecuado para el campo que representa (una cadena,un objeto de fecha, un booleano, etc...).

    Nota: Es muy sencillo definir objetos DataTable que dispongan de los campos quedeseemos sin depender de origen alguno de datos. Emplee el mtodo Add de lacoleccin Columns para crear nuevos campos, algunos de los cuales pueden ser incluso

    derivados mediante una frmula de los valores de otros. Esto permite definirestructuras de almacenamiento a medida en memoria sin preocuparnos de usar unabase de datos para ello.

    1.3.2.2.2. Ventajas del uso de objetos DataSetEs posible cargar datos de varias tablas en un mismo DataSet, incluso aunque procedande bases de datos diferentes, y relacionarlas en memoria. Es posible establecerrelaciones entre ellas para mantener la consistencia, as como hacer un mantenimientoen memoria de los datos (altas, bajas y modificaciones). Posteriormente se puede

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    46/1

    46

    sincronizar el DataSet con el servidor usando un DataAdapter, realizando el procesocontrario al de obtencin de datos. Luego lo veremos.

    La principal ventaja de un DataSet es que podemos almacenarlo en donde queramos(en una variable global, en cach, incluso a disco a una base de datos) para trabajarcon l sin estar conectado a una base de datos. De hecho se pueden transferir DataSetcompletos entre diferentes mquinas o por Internet, trabajar con ellos en remoto,almacenarlos, recuperarlos y finalmente transferirlos en cualquier momento de nuevo al

    origen (enteros o slo los cambios) para sincronizarlos.Es posible moverse con libertad entre los registros de una tabla y sus registrosrelacionados en otras tablas. Y sobre todo, se pueden vincular con elementos de lainterfaz grfica para mostrar los datos automticamente.

    1.3.2.3. Consultas parametrizadasLas consultas simples como la que acabamos de utilizar en los ejemplos anteriores son muyraras. En la realidad las consultas son mucho ms complejas, suelen intervenir variastablas y dependen de diversos parmetros que le aaden condiciones.

    Por ejemplo, si en la base de datos Northwind queremos obtener slo aquellos clientes deun pas determinado. Podramos escribir de nuevo la funcin DameClientes para que se

    pareciese a la siguiente:

    Esta funcin acepta un pas como parmetro y lo nico que hace es concatenar a laconsulta una nueva condicin que introduce el pas.

    Esto, sin duda, funcionara. Sin embargo presenta multitud de problemas seguramente nodemasiado obvios para los programadores noveles. Los ms importantes son lossiguientes:

    1. Este cdigo es vulnerable a problemas de seguridad provocados por ataques deinyeccin de SQL. Esto puede poner en peligro fcilmente nuestra aplicacin e inclusotodo nuestro sistema en casos graves. El estudio de esta problemtica se sale delmbito de este curso, pero crame cuando le digo que se trata de un gravsimoproblema que debemos evitar a toda costa.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    47/1

    47

    2. Si se solicitan 100 consultas idnticas al servidor en las que slo vara el nombre delpas por el que se filtra, ste no tiene modo de saber que son las mismas y sacar factorcomn. Es decir, no se puede reutilizar el plan de consultade la primera de ellaspara las dems por lo que se debe calcular de nuevo cada vez, incidiendo en elrendimiento y la escalabilidad de la aplicacin. Obviamente en consultas mscomplicadas es un problema ms importante que en esta.

    3. Este cdigo es ms difcil de transportar a otros sistemas de bases de datos ya que hayque incluir los delimitadores y notaciones especficos de cada gestor. Por ejemplo enSQL Server los delimitadores de fechas son comillas simples ('), mientras que en Accessson almohadillas (#) y la sentencia usada no se puede reutilizar.

    La forma correcta de realizar este tipo de consultas es utilizar parmetros en la consulta.Ello evita los problemas enumerados.

    Los objetos de tipo Command disponen de una coleccin llamada Parameters que sirvepara asignar dichos parmetros. stos previamente se definen en la consulta utilizandocomodines que marquen su ubicacin.

    Nota: Cada proveedor de datos utiliza su propia convencin para indicar la posicin de losparmetros en una consulta. En el caso de SQL Server se indican con una arroba '@'seguida de un identificador. En otros proveedores no se puede definir nombre para los

    parmetros, slo se marca su posicin con un caracter especial.La funcin anterior empleando parmetros sera la siguiente:

    Se ha resaltado los cambios.

    Como vemos en lugar de concatenar cadenas se marca la posicin de las partes de laconsulta que varan con un parmetro que consta de una arroba seguida de unidentificador.

    Luego hay que declarar el parmetro aadindolo a la coleccin de parmetros. Para ello seindica su nombre y el tipo de datos que representa (en este caso un NVarChar de SQLServer, que es una cadena de longitud variable).

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    48/10

    48

    Por fin se asigna su valor concreto antes de lanzar la consulta.

    El proveedor de datos crea la consulta de la manera correcta, usando los delimitadoresadecuados y tratando los datos del modo que sea preciso para asegurar que es correcta.Ello elimina los problemas de los que hablbamos anteriormente y permite optimizar el usode consultas.

    1.3.2.4. Altas bajas y modificacionesCon lo que hemos visto hasta ahora ya estamos en condiciones de escribir cdigo pararealizar altas, bajas y modificaciones de registros. Al fin y al cabo stas son simplementeconsultas SQL del tipo adecuado (INSERT, DELETE o UPDATE) que se deben enviar alservidor.

    As pues, para crear un nuevo cliente podemos escribir una funcin como la siguiente:

    Es un cdigo muy similar al anterior que realizaba una seleccin de datos. En este caso se

    ha definido una consulta de insercin con tres parmetros. En lugar de usar ExecuteReadero un DataAdapter en este caso se utiliza el mtodo ExecuteNonQuery. ste lanza laconsulta (es decir, se inserta el nuevo registro) y devuelve el nmero de registrosafectados por la consulta (que en el caso de una insercin siempre es 1 si se insertacorrectamente o 0 si ha habido un error).

    Las actualizaciones y eliminaciones de registros se podran conseguir de modo similar.

    1.3.2.4.1. Trabajando desconectadosEl cdigo anterior funciona perfectamente pero no es la forma ptima de trabajarcuando tenemos que tratar con datos desconectados contenidos en objetos DataSet.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    49/1

    49

    Los DataSet normalmente circulan, independientes de cualquier origen de datos, entrelas diferentes capas de una aplicacin e incluso se mueven entre contextos de ejecuciny mquinas (por ejemplo a travs de un servicio Web como veremos). Hemos dicho queson como pequeas bases de datos, por lo que la forma habitual de trabajar con ellos esaadir, eliminar y modificar registros directamente sobre sus tablas, sin pensar en laubicacin real de estos datos.

    As pues, para crear un nuevo registro en un DataSet debemos usar el mtodo

    NewRow del DataTable en la que lo queremos insertar. El nuevo registro tiene lamisma estructura (el mismo "esquema") que el resto de registros y slo tendremos querellenar sus datos. Una vez rellenados aadiremos el nuevo registro a la coleccin defilas de la tabla. As por ejemplo si tenemos almacenado un DataSet con una tabla conlos datos de los clientes obtenidos con la funcin de ejemplo DameClientes, podramosagregar uno nuevo de la siguiente manera:

    Es decir, se crea la nueva fila/registro, se rellenan sus campos y se aade a la coleccinde filas con el mtodo Addde sta.

    La actualizacin de datos es ms sencilla an ya que basta con acceder directamente alregistro que nos interesa modificar y cambiar los valores de sus campos. Por ejemplo,para modificar la direccin del cliente cuyos datos estn en el quinto registro de nuestratabla slo hay que escribir:

    Por fin, para eliminar un registro slo hay que usar su mtodo Delete, as:

    que borrara el quinto registro de nuestra tabla en memoria.

    1.3.2.4.2. Conciliando los cambios con el origenEs muy fcil trabajar con los Dataset en memoria de este modo. Slo hay un "pequeo"problema: los cambios se realizan en memoria pero, al no estar vinculado el DataSetcon origen de datos alguno, no los veremos reflejados en la base de datos que es lo quebuscamos.

    Debemos realizar una sincronizacin entre la representacin en memoria de los datos ysu ubicacin fsica real, para lo cual debemos hacer que los cambios trasciendan a lacapa conectada. Al igual que cuando los recuperamos, el trasiego en el otro sentido serealiza con la ayuda del puente que representa la clase DataAdapter.

    Al igual que utilizbamos la propiedad SelectCommand para indicar cmo serecuperaban los datos hacia un DataSet, ahora debemos utilizar las propiedadesInsertCommand, UpdateCommandy DeleteCommandpara indicar qu comandosse deben usar para agregar, modificar y eliminar los registros modificados en memoriaa travs del DataSet.

    Una vez especificados estos comandos slo resta llamar al mtodo Update delDataAdapterpara que se ocupe de sincronizar automticamente todos los cambios quehayamos realizado en las tablas en memoria. Este mtodo acepta como argumentos un

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    50/1

    50

    DataSetcompleto, una DataTableo incluso un DataRowsi slo queremos actualizar unnico registro.

    1.3.2.4.3. Definicin de los comandosLos comandos de insercin, modificacin o borrado para el DataAdapter se definen delmismo modo que en el cdigo de ejemplo al principio de este apartado, es decir, sedefine la consulta apropiada y sus parmetros. En esta ocasin como los parmetros

    sern rellenados automticamente por el DataAdapter hay que utilizar una sobrecargadel mtodo Add de la coleccin de parmetros que incluye el nombre del campoasociado con el parmetro, as:

    En este caso se define el parmetro "@Direccin", de tipo NVarChar y longitud 60 quese refiere siempre al valor del campo "Address" de la tabla.

    Por ejemplo, para definir la consulta de eliminacin de registros de la tabla de clientesusaramos el siguiente cdigo:

    siendo CustomerIDla clave primaria de la tabla.

    Una vez definidos los tres parmetros de alta, baja y modificacin slo resta llamar aUpdate para que el DataAdapter se ocupe de toda la sincronizacin.

    1.3.2.4.4. VentajasEste modelo est lleno de ventajas aunque a primera vista pueda parecer algoengorroso.

    Nota: Luego veremos que podemos usar las herramientas que nos proporciona VisualStudio 2005 para definir de manera automtica los comandos de manipulacin de datossin necesidad de pasar el trabajo de hacerlo manualmente.

    Para empezar podemos trabajar con los datos en total libertad sin preocuparnos de siexiste conexin o no con el origen y aunque el DataSetse manipule en una ubicacinfsica a miles de kilmetros del origen y desconectado de ste o los cambios sealmacenen a disco y se concilien das ms tarde.

    Se pueden realizar multitud de modificaciones en los datos y luego conciliarlassimultneamente en lugar de hacerlo en tiempo real de una en una.

    El paso de datos entre capas y funciones se simplifica. Lo habitual antes era definirfunciones con tantos parmetros como datos se quisieran modificar en un registro. Porejemplo, para insertar un registro en una tabla que tiene 20 campos se defina unafuncin con 20 parmetros (muchos de ellos opcionales) o, en el mejor de los casos, se

    pasaba una clase creada a medida que representaba lo valores del registro. Ahora bastacon pasar un DataSet, un DataTable o un dataRow que ya contiene toda la informacinque necesitamos saber sobre los registros y su tabla asociada.

    Lo mejor es que es posible saber mediante ciertas propiedades qu registros hancambiado (nuevos, modificados, borrados) y mover entre capas exclusivamente estos.La propiedad HasChangesde los DataSet, DataTabley DataRownos informa de si elobjeto ha sufrido cambios de algn tipo.

    El mtodo GetChanges de los objetos DataSet y DataTable devuelve un subconjuntode los datos que contiene exclusivamente los cambios. As, aunque en un DataSet

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    51/1

    51

    tengamos 1000 registros, si slo hemos modificado 2 slo ser necesario trasegar lainformacin de estos a la hora de enviarlos a otra capa o funcin para sincronizarlos conla base de datos.

    El mtodo GetChanges se puede invocar sin parmetros o indicando qu tipo decambios queremos obtener, lo que se indica con un valor de la enumeracinDataRowState:

    Valor Significado

    Added Registros que no estaban originalmente

    Deleted Registros que se han eliminado

    Modified Registros cuyos valores se han modificado

    UnChanged Registros que no se han modificado

    Detached Registros que se han desasignado de una tabla (pero no borrado conDelete)

    Se puede dejar un DataSet en estado sin modificar llamando a su mtodoAceptChanges. Esto es lo que hace un DataAdapter tras haber sincronizado loscambios con el origen de datos.

    1.3.3. Acceso a datos con Visual Studio 2005Ahora que ya hemos visto la forma de trabajo manual con ADO.NET y dominamos losfundamentos, vamos a sacar partido a todas las ventajas que nos proporciona un entornocomo Visual Studio 2005 que, como veremos, nos permiten hacer casi cualquier tarea de datossin necesidad de escribir cdigo.

    1.3.3.1. Controles de datosAparte de la escritura manual de cdigo y el uso directo de objetos de ADO.NET, ASP.NET2.0 proporciona un nuevo modelo de trabajo declarativo para acceso a datos que nospermite realizar tareas comunes de acceso a datos sin escribir cdigo alguno.

    ASP.NET 2.0 presenta dos nuevos tipos de controles Web que participan en este modelodeclarativo de enlace a datos. Estos controles nos abstraen por completo de lascomplejidades de manejo de las clases de ADO.NET por un lado, y de las dificultadesinherentes al modo de trabajo desconectado de las pginas Web. Equiparan en muchosaspectos el desarrollo Web al tradicional desarrollo de aplicaciones de escritorio.

    Estos controles se encuentran agrupados en el cuadro de herramientas bajo el nombre de"Datos", tal y como se ve en la figura.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    52/1

    52

    1.3.3.1.1. Orgenes de datosEstos controles de datos representan conexiones con diferentes tipos de orgenes deinformacin que van desde bases de datos a objetos de negocio. No disponen deapariencia visual pero se arrastran igualmente sobre los formularios Web para trabajar

    con ellos visualmente y poder usar sus paneles de tareas. Abstraen al programador delas complejidades relacionadas con el manejo de los datos, permitiendo de maneraautomtica seleccionarlos, actualizarlos, ordenarlos, paginarlos, etc.

    ASP.NET 2.0 ofrece los siguientes controles de origen de datos que se pueden ver en lafigura anterior:

    Control Descripcin

    SqlDataSource Enlaza con cualquier base de datos para que exista unproveedor de ADO.NET.

    AccessdataSourceEsta especializado en trabajar con bases de datos MicrosoftAccess.

    ObjectDataSourceSe enlaza con objetos de negocio y capas personalizadas deacceso a datos.

    XmlDataSource Trata datos contenidos en documentos XML.

    SiteMapDataSource Se enlaza con la jerarqua de clases expuesta por el modelo denavegacin de sitios de ASP.NET 2.0.

    ATENCIN!: El control SqlDataSource sirve para enlazar con cualquier gestor dedatosrelacional para la que haya proveedor ADO.NET disponible, no slo para enlazarcon SQL Server. No se deje despistar por su nombre.

    1.3.3.1.2. Concurrencia optimistaDurante la configuracin de un origen de datos SQL (luego lo ver en el primer vdeo deesta leccin) una de las opciones avanzadas que se presenta habla de la Concurrenciaoptimista. La concurrencia optimista evita la actualizacin de registros en el caso deque haya variado cualquiera de sus campos desde que se obtuvieron de la fuente dedatos. Este comportamiento puede ser bueno en ciertas ocasiones, cuando queremospreservar los cambios realizados por cualquier usuario. En otras sin embargo no resultade utilidad y s aade una gran sobrecarga al acceso a datos.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    53/1

    53

    Se le denomina concurrencia optimista porque parte de la base de que la posibilidad decoincidencia de dos usuarios sobre el mismo registro es baja y es un caso que apenasse dar. Al caso contrario a la concurrencia optimista se le denomina concurrenciapesimista.

    Nota: En mi opinin debera llamarse "concurrencia realista" ya que, lo cierto es que sise analiza con detenimiento la posibilidad de conflicto en un sistema grande tiende a serrealmente pequea en la mayora de los casos. Y de todos modos el sobreescribir cierta

    informacin no suele ser un problema grave salvo cuando hablamos de cuestiones dedinero, facturas y similares.

    Cuando se establece la concurrencia optimista las consultas que genera el asistente deVisual Studio incluyen todos los campos del registro como condicin de bsqueda delmismo, por ejemplo:

    DELETE FROM[Customers]WHERE[CustomerID] = @original_CustomerIDAND[CompanyName] = @original_CompanyNameAND[ContactName] = @original_ContactNameAND[ContactTitle] = @original_ContactTitleAND[Address] = @original_AddressAND [City] = @original_City

    AND[Region] = @original_RegionAND[PostalCode] = @original_PostalCodeAND[Country] = @original_CountryAND[Phone] = @original_PhoneAND[Fax] = @original_Fax

    mientras que en un caso de concurrencia pesimista se emplea simplemente la claveprimaria del registro para localizarlo:

    DELETE FROM[Customers]WHERE[CustomerID] = @original_CustomerID

    Es decisin suya qu tipo de actualizacin utilizar pero en la mayor parte de los casosusar seguramente la pesimista que, de hecho, es la que usted utiliza normalmente siescribe las funciones a mano de manera independiente.

    1.3.3.1.3. Controles enlazados a datosSe trata de controles de interfaz de usuario que, haciendo uso de los anteriores,muestran la informacin a travs de la pgina. Pueden sacar partido a todas laspropiedades de los orgenes de datos y por lo tanto habilitan de manera sencilla laedicin, eliminacin, ordenacin, filtrado y paginacin de los datos entre otras cosas.

    Para conectar un control enlazado a un DataSource slo hay que establecer supropiedad DataSourceIDindicando el nombre apropiado. As de fcil.

    Nota: Si usted ya conoce los controles enlazados a datos de ASP.NET 1.x como elDataGrid, el DataRepeater, etc... estos controles le resultarn ms cmodos de utilizar

    pues al contrario que con aquellos no hay que escribir cdigo alguno. Aunque estoscontroles "antiguos" no aparecen en el cuadro de herramientas siguen estando

    soportados y los puede seguir utilizando. Incluso si lo desea puede aadirlos al cuadrode herramientas. De todos modos se recomienda utilizar el nuevo modelo declarativo deacceso a datos.

    1.3.3.1.4. Uso de los controles de datos en la prcticaLa mejor forma de conocer la manera de trabajar con estos controles es vindolosactuar en la prctica. Los vdeos de esta leccin muestran un ejemplo completo de usode los controles en el que se explotan unos datos para su visualizacin, edicin yeliminacin. Por favor, examnelo con atencin y luego trate de practicarlo por su cuentacon ejemplos similares.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    54/1

    54

    1.3.3.2. DataSet tipadosLa clase DataSet, como cualquier otra clase no sellada de .NET, puede ser extendidamediante herencia para aadirle nuevas funcionalidades y aprovechar las ya existentes. Sicreamos una nueva clase que herede de DataSet y sta la especializamos en el tratamientode un conjunto de datos determinado que conocemos de antemano nos encontramos unDataSet especializado.

    Por ejemplo, podemos crear un DataSet especial que tengan en cuenta las particularidadesde los datos que maneja para validarlos antes de permitir su insercin, que verifique lasrelaciones con otros datos o que los transforme o controle el acceso a los mismos. Nosotrosslo tendramos que ocuparnos de estas tareas dejando a la clase DataSet de la que hemosheredado todos los puntos complejos que tienen que ver con la gestin de datos pura ydura.

    Esta es, en esencia, la idea que subyace bajo los DataSet tipadosde Visual Studio 2005.Se trata de clases especializadas derivadas de DataSet que ofrecen una forma ms rpida ysencilla de acceder a los datos que albergan. Adems Visual Studio nos permite crear estetipo de DataSet de forma visual y usando asistentes. En el vdeo se ilustra la manera deconseguirlo.

    Los DataSet tipados parten del conocimiento preciso de la estructura de una base de datos

    para definir su funcionalidad. Esta es su principal diferencia con los DataSet normalespuesto que stos son genricos y no saben nada acerca de los datos que albergan. Lostipados slo sirven para albergar una informacin muy concreta. Ganan en especializaciny pierden en versatilidad.

    Para agregar un DataSet tipado a nuestro proyecto slo hay que presionar con el botnsecundario sobre la carpeta App_Code y en el dilogo que aparece elegir el icono deDataSet. La extensin del archivo generado es '.xsd' porque lo que en realidad albergan esun esquema XML que define la estructura de los datos en los que se van a especializar.

    Una vez agregado el DataSet aparece una superficie de diseo y un asistente como el de lafigura.

    Figura 4.5.- Primer paso del asistente de configuracin de un TableAdapter.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    55/1

    55

    Este asistente nos permite configurar un objeto TableAdapter que se encargar detrasegar datos entre el DataSet tipado que estamos creando y la base de datos. UnTableAdapteres una clase que encapsula a un DataAdapter especializado en los datos quevamos a procesar con la tabla del DataSet tipado que estamos definiendo. De hecho susmtodos son, por defecto, los mismos que los de un DataAdapternormal (Fill, Update...).

    Con l dispondremos de mtodos para recuperar informacin, crear nuevos registros,actualizarlos y eliminarlos, slo que los correspondientes comandos estarn creados de

    manera automtica o asistindonos en ello. As, por defecto, se definen un par de mtodospara obtener los datos subyacentes rellenando un DataSet que se le pase (mtodo Fill) odevolviendo directamente un DataTable (mtodo GetData). Adems el mtodo Updatesirve para conciliar automticamente los cambios del un DataSet tipado con la base dedatos original.

    No vamos a analizar desde el texto la definicin de estos objetos adaptadores pero puedeconocerlo viendo el vdeo de esta leccin.

    Truco: Podemos ver el cdigo que se genera de manera automtica para crear elDataAdapter si hacemos doble-clic sobre l desde el examinador de objetos de VisualStudio (CTRL+ALT+J). Esto har que se abra el archivo de cdigo auto-generado por

    ASP.NET desde la ubicacin real de ejecucin (normalmente una ruta del estilo

    C:\Windows\Microsoft.NET\....). Es muy interesante echarle un vistazo a este cdigo paraaprender el funcionamiento interno de los DataSet tipados.

    1.3.3.2.1. Partes de un DataSet tipadoAl igual que un DataSet normal, uno tipado consta de un conjunto de tablas y relacionesentre ellas. En este caso, sin embargo, podemos acceder a las tablas y a sus camposutilizando directamente sus nombres en lugar de recorrer la coleccin de tablas, lo cuallo hace ms fcil de usar.

    Cada una de las tablas del DataSetlleva asociado como mnimo un TableAdapter. Entrelos dos objetos (el DataTable y el o los TableAdapter relacionados) se reparten eltrabajo. El DataTable tipado mantiene en memoria la informacin y el TableAdapteracta de puente con la tabla real en la base de datos.

    Nota: Como sabemos (y veremos en el vdeo tambin) las tablas de un DataSet notienen porqu coincidir con tablas reales de una base de datos ya que pueden serresultados obtenidos de una consulta compleja que involucre a varias tablas. En estoscasos es ms complicada la actualizacin y se suelen usar nicamente para recuperardatos. la alternativa habitual es tratar de replicar la estructura fsica de la base de datosen la estructura en memoria del DataSet de modo que se tiene acceso estructurado a lamisma informacin y gracias a las relaciones y restricciones se conserva la consistenciade los datos tambin estando desconectados.

    El DataSet tipado dispone de propiedades que coinciden con los nombres de los objetosque contienen. As, por ejemplo, si tenemos una tabla "Clientes" con un campo"Nombre" podemos acceder a l directamente con este cdigo:

    ds.Clientes(0).Nombre

    que nos dara el nombre del primer cliente de la tabla de clientes en el DataSet 'ds'.esta propiedad nombre adems ya sera un campo de tipo String que es el tipoadecuado para la informacin albergada, por lo que se simplifica mucho su uso.

    En un DataSet normal para obtener lo mismo tendramos que haber escrito:

    ds..Tables(0).Rows(0)("Nombre").ToString()

    que obviamente es mucho menos legible.

    La cosa no termina aqu ya que adems se definen clases especficas para representarlos registros de las tablas. Por ejemplo si la tabla se llama 'Clientes' existir una clase

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    56/1

    56

    ClientesRow que dispone de propiedades con el mismo nombre y tipo que los camposcorrespondientes en la tabla de la base de datos y que hemos usado en la lnea deejemplo. As, para aadir un cliente podramos escribir:

    Dim cliente As New Clientecliente.Nombre = "Pepe"....ds.Clientes.AddClientesRow(cliente)

    Ntese que el mtodo Add del DataTable se ha sustituido por uno con nombreespecializado que nos ayuda a saber mejor por donde pisamos, pero su funcin esidntica.

    Para rellenar una tabla de un DataSet tipado se usa su correspondiente TableAdapteras:

    Dim clientes As New ClientesDSDim ta As New ClientesTableAdapters.ClientesTableAdapter()ta.Fill(clientes.Clientes)clientes.Clientes(0).Nombre = "Pepe"....

    o tambin usando el mtodo GetData para obtener la tabla directamente si slo nos

    interesa esa parte concreta del DataSet (que puede constar de varias tablas):Dim clientes As Clientes.ClientesDataTableDim ta As New ClientesTableAdapters.ClientesTableAdapter()clientes = ta.GetData()clientes(0).Nombre = "Pepe"....

    Para un mismo DataTabletipado se pueden definir diversos TableAdapterespecializadosaparte del bsico que permite llenar todos los datos: para filtrar por diversosparmetros normalmente.

    El uso de DataSettipados es muy recomendable puesto que simplifica mucho el trabajopuesto que podemos realizar casi todo el trabajo utilizando asistentes y accediendo a la

    informacin de manera muy cmodo. Adems es un modo muy sencillo de separar lafuncionalidad de la base de datos del resto del cdigo. As, si se hace necesario en elfuturo, se puede exponer esta parte de manera independiente mediante un, porejemplo, un servicio Web que utilice el DataSettipado y sus TableAdapterspara accedera los datos desde una ubicacin remota.

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    57/1

    57

    2. Creacin de bases de datos con Visual StudioLa mayora de aplicaciones comerciales (y principalmente las de gestin) utilizan datos que debenguardarse en algn sitio. Generalmente esta informacin se guarda en bases de datos. En stemdulo, vers cmo crear una base de datos para SQL Server 2005 Express, y crears tablas paraguardar la informacin a almacenar; aprenders sobre los tipos de datos que forman las columnas

    de las tablas, cmo relaciona las tablas, integridad, y cmo realizar consultas sobre las tablas.

    2.1. Objetos bsicos del sistema2.1.1. Crear una base de datosCuando se crea una base de datos, es importante comprender cmo SQL Server almacena losdatos para poder calcular y especificar la cantidad de espacio en disco que hay que asignar alos archivos de datos y registros de transacciones. Aunque SQL Server automticamenteincrementa el tamao asignado a los ficheros de bases de datos dinmicamente, para tener unrendimiento ptimo del sistema (evitar fragmentacin de los ficheros), se recomienda ser"precisos" a la hora de definir el tamao de la base de datos.

    2.1.1.1. Ficheros de la base de datosTodas las bases de datos tienen un archivo de datos principal (.mdf), y uno o variosarchivos de registro de transacciones (.ldf). Una base de datos tambin puede tenerarchivos de datos secundarios (.ndf). La extensin definida para cada tipo de archivos eslibre, pero como buenas prcticas se suele seguir el modelo de extensiones recomendadopor Microsoft (mdf, ldf, y ndf). El proceso de creacin de la base de datos, consiste enhacer una copia de la base de datos model, que incluye las tablas del sistema. La ubicacinpredeterminada para todos los archivos de datos y registros de transacciones esC:\Archivos de programa\Microsoft SQL Server\MSSQL.1\MSSQL\Data.

    La base de datos puede configurarse con tres modelos de recuperacin en caso de fallo delsistema (FULL, BULK_LOGGED, y SIMPLE); evala cada modelo en base a las necesidades

    del sistema que ests implementando.

    2.1.1.2. Creacin de base de datos desde SQL Server 2005 ManagementStudio Express

    SQL Server Management Studio Express es la herramienta de administracin incluida conSQL Server Express; la herramienta no fue incluida en la primera distribucin de SQLServer Express, y se puede descargar de forma gratuita de la siguiente url:

    Microsoft SQL Server Management Studio Express - Community Technology Preview (CTP)November 2005:

    http://www.microsoft.com/downloads/details.aspx?familyid=82afbd59-57a4-455e-a2d6-1d4c98d40f6e&displaylang=en

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    58/10

    58

    Para crear una base de datos desde SQL Server 2005 Management Studio, expande la listade bases de datos, de la lista de instancias de SQL Server 2005 registradas, y selecciona laopcin "New database":

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    59/1

    59

    Debers rellenar el nombre de base de datos, nombres lgico y fsico de los archivosrelacionados, y tamao de los ficheros, as como su crecimiento:

  • 5/28/2018 Tutorial de SQL Server 2005 Express

    60/1

    60

    Y debers establecer el modo de recuperacin de la base de datos; en la versin Express alcrear una base de datos por defecto se establece como recuperacin SIMPLE:

    Para famializarte con la sintaxis del lenguaje T-SQL, te recomiendo que utilices la opcin demen script (en recuadro verde en las dos imgenes anteriores), que mostrar lainstruccin T-SQL correspondiente a las operaciones que has ido configurando en lasdistintas opciones.

    2.1.1.3. ConsideracionesDependiendo de las necesidades a cubrir del sistema de base de datos a desarrollar,debers configurar los archivos de una forma u otra; por ejemplo, en grandes sistemasllegars a configurar niveles de redundancia de discos (RAID), y repartirs la informacinde las tablas en distintos ficheros. Aunque no est soportado en la versin Express,funcionalidades del producto como Particionado de datos, llegan a ser primordiales, y es unfactor a considerar desde el momento de diseo del sistema.

    Por otro lado, para familiarizarte con SQL Server, recomendara entender las opciones deconfiguracin de base de datos que aparecen en la pestaa opciones, que aunque no sonnecesarias para comenzar a disear bases de datos SQL Server, si ayudan a comprenderun poco