La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

ADO.NET y SQL Server 2005 ADO.NET y SQL Server 2005 David Salgado MVP C# David Salgado MVP C#

Presentaciones similares


Presentación del tema: "ADO.NET y SQL Server 2005 ADO.NET y SQL Server 2005 David Salgado MVP C# David Salgado MVP C#"— Transcripción de la presentación:

1 ADO.NET y SQL Server 2005 ADO.NET y SQL Server 2005 David Salgado MVP C# david.salgado@muxu.net David Salgado MVP C# david.salgado@muxu.net

2 Agenda ADO.NET Modo Conectado Modo Desconectado Integración con XML Motores de BBDD SQL Server 2005 ADO.NET Modo Conectado Modo Desconectado Integración con XML Motores de BBDD SQL Server 2005

3 Agenda ADO.NET Modo Conectado Modo Desconectado Integración con XML Motores de BBDD SQL Server 2005 ADO.NET Modo Conectado Modo Desconectado Integración con XML Motores de BBDD SQL Server 2005

4 ADO.NET Clases, interfaces, estructuras y tipos que gestionan el acceso a los datos desde.NET (no sólo BBDD) Enfocado al desarrollo en n-capas con XML como pilar Los que vienen por defecto System.Data.OleDb System.Data.SqlClient System.Data.Odbc ( vs.net 2003 ) System.Data.Oracle ( vs.net 2003 ) Personalizados Clases, interfaces, estructuras y tipos que gestionan el acceso a los datos desde.NET (no sólo BBDD) Enfocado al desarrollo en n-capas con XML como pilar Los que vienen por defecto System.Data.OleDb System.Data.SqlClient System.Data.Odbc ( vs.net 2003 ) System.Data.Oracle ( vs.net 2003 ) Personalizados

5 Componentes de ADO.NET Consumidores de datos WinForm WebForm Otros DataSet Proveedores de datos DataAdapter Command DataReader Connection ADO.NET

6 Componentes de ADO.NET Proveedores de datos xxxConnection xxxCommand xxxDataReader xxxDataAdapter Modo Desconectado DataAdapter, DataSet Proveedores de datos xxxConnection xxxCommand xxxDataReader xxxDataAdapter Modo Desconectado DataAdapter, DataSet

7 DataSet Objeto estrella en ADO.NET Representa una caché de datos en memoria Contiene DataTables Lee y escribe datos y esquemas en XML Serializable Puede ser tipado o no tipado: El tipado se apoya en un esquema XML (.XSD) para generar la clase El tipado tiene ventajas: Conoce la estructura Objeto estrella en ADO.NET Representa una caché de datos en memoria Contiene DataTables Lee y escribe datos y esquemas en XML Serializable Puede ser tipado o no tipado: El tipado se apoya en un esquema XML (.XSD) para generar la clase El tipado tiene ventajas: Conoce la estructura

8 DataSet DataSet DataTable DataTable DataRow DataColumn Relations Constraints XML Schema

9 DataAdapter DataAdapter SelectCommand InsertCommand UpdateCommand DeleteCommand TableMappings Base de datos DataSet

10 SqlConnectionODBCConnectionOleDbConnection…… Capa de acceso a BBDD Capa de negocio Clientes ( windows, web, smartclient … ) ADO.NET ( alternativas ) Capa de Acceso a BBDD XDataReader XConnection XCommand XDataAdapter DataSet

11

12 Modo Conectado Modo Desconectado Modo Conectado Modo Desconectado

13 ADO.NET ¿Como escoger? Que exista el modelo desconectado no quiere decir que lo usemos para todo El acceso conectado es más rápido Escenarios desconectados Navegación en una aplicación Windows Entornos móviles … Cómo decidir Arquitectura http://msdn.microsoft.com/architecturehttp://msdn.microsoft.com/architecture Patterns & Practices http://www.microsoft.com/resources/practices Building Blocks Que exista el modelo desconectado no quiere decir que lo usemos para todo El acceso conectado es más rápido Escenarios desconectados Navegación en una aplicación Windows Entornos móviles … Cómo decidir Arquitectura http://msdn.microsoft.com/architecturehttp://msdn.microsoft.com/architecture Patterns & Practices http://www.microsoft.com/resources/practices Building Blocks

14 Agenda ADO.NET Modo Conectado Modo Desconectado Integración con XML Motores de BBDD SQL Server 2005 ADO.NET Modo Conectado Modo Desconectado Integración con XML Motores de BBDD SQL Server 2005

15 Integración con XML XML como almacén de información Relación con el DataSet DataSet ds = new DataSet(); ds.ReadXml(archivo.xml); ds.Tables[0].Rows….. ds.WriteXml(archivo.xml); APIs de trabajo con XML DOM, SAX, XPath Vendrán: XPath2, XQuery XML como almacén de información Relación con el DataSet DataSet ds = new DataSet(); ds.ReadXml(archivo.xml); ds.Tables[0].Rows….. ds.WriteXml(archivo.xml); APIs de trabajo con XML DOM, SAX, XPath Vendrán: XPath2, XQuery

16 ADO.NET Integración con XML Capa Negocio Capa Datos Capa Presentación Web forms Negocio a Negocio DataSet DataSet Internet Intranet DataAdapter DataAdapter Xml Aplicación.Exe IE DataSet Windows forms

17 XML como almacén de información

18 Agenda ADO.NET Modo Conectado Modo Desconectado Integración con XML Motores de BBDD SQL Server 2005 ADO.NET Modo Conectado Modo Desconectado Integración con XML Motores de BBDD SQL Server 2005

19 Curioso… ¿Por qué no nos gustan las BBDD a los desarrolladores? Ejercicios 3FN SQL = Simple Query Language No optimizamos, no hacemos trucos,…. ¿Por qué no nos gustan las BBDD a los desarrolladores? Ejercicios 3FN SQL = Simple Query Language No optimizamos, no hacemos trucos,…. Eso es sólo académicamente

20 Motores de Base de Datos Orientados a archivo La base de datos se encuentra en un archivo Implicaciones Acceso desde el cliente Ineficiente en accesos simultáneos Para trabajar con aplicaciones distribuidas: Replicarlos en los equipos Directorios compartidos, FTPs… Ejemplos: Clipper, MS Access (.mdb) La base de datos se encuentra en un archivo Implicaciones Acceso desde el cliente Ineficiente en accesos simultáneos Para trabajar con aplicaciones distribuidas: Replicarlos en los equipos Directorios compartidos, FTPs… Ejemplos: Clipper, MS Access (.mdb)

21 Motores de Base de Datos Orientados a servidor Ya no trabajamos contra un archivo, trabajamos contra un servicio Preparado para accesos simultáneos Cliente / Servidor Ejemplos: SQL Server, Oracle, Informix, DB2, PostgreSQL… Ya no trabajamos contra un archivo, trabajamos contra un servicio Preparado para accesos simultáneos Cliente / Servidor Ejemplos: SQL Server, Oracle, Informix, DB2, PostgreSQL…

22 Motores de Base de Datos Mitos, Leyendas y el sexo de los ángeles Bases de Datos Orientadas a Objetos Motores de persistencia SI ObjectSpaces, Hibernate, … ¿Qué debemos hacer? ( básico ) Transact-SQL (T-SQL) Evitar select * from …; Evitar búsquedas like %tal Crear índices, pero no demasiados Se obtienen buenas sugerencias desde el DTA (Database Tuning Advisor ) Definir el esquema de BD en 3FN Claves primarias, externas, etc. Partir de un buen diseño y desnormalizar según necesidades del desarrollo Bases de Datos Orientadas a Objetos Motores de persistencia SI ObjectSpaces, Hibernate, … ¿Qué debemos hacer? ( básico ) Transact-SQL (T-SQL) Evitar select * from …; Evitar búsquedas like %tal Crear índices, pero no demasiados Se obtienen buenas sugerencias desde el DTA (Database Tuning Advisor ) Definir el esquema de BD en 3FN Claves primarias, externas, etc. Partir de un buen diseño y desnormalizar según necesidades del desarrollo

23 Motores de Base de Datos SQL Server 2000 Notification Services Notificaciones & Alertas Data Transformation Services ETL SQL Server Engine Relational Database Engine Reporting Services Informes Empresariales Herramientas de Gestión Herramientas de desarrollo Replication Services Replicación de Datos Analysis Services OLAP & Data Mining

24 Motores de Base de Datos Integración del CLR en el motor Soporte HTTP (Servicios Web endpoints) Nuevo tipo de datos: XML Mejoras en T-SQL Service Broker Nuevo modelo de seguridad Mejoras en administración … Integración del CLR en el motor Soporte HTTP (Servicios Web endpoints) Nuevo tipo de datos: XML Mejoras en T-SQL Service Broker Nuevo modelo de seguridad Mejoras en administración …

25 .NET Framework Common Language Runtime Integration User-defined Aggregates User-defined Data Types User-defined Functions SQL Server.NET Data Provider Extended Triggers Data Types Managed SQL Types New XML Datatype Varchar (MAX) Varbinary (MAX) SQL Server Engine New Message Service Broker HTTP Support (Native HTTP) Database Tuning Advisor Multiple Active Result Sets Persisted Computed Columns Snapshot Isolation Level Scale Up Partitioning VIA support NUMA support Database Failure and Redundancy Fail-over Clustering (up to 8 node) Enhanced Multi-instance Support Database Mirroring Database Snapshots XML XQUERY Support XML Data Manipulation Language FOR XML Enhancements XML Schema (XSD) Support MSXML 6.0 (Native).Net XML Framework Full-text Search Indexing of XML Datatype Database Maintenance Backup and Restore Enhancements Checksum Integrity Checks Dedicated Administrator Connection Dynamic AWE Fast Recovery Highly-available Upgrade Online Index Operations Online Restore Parallel DBCC Parallel Index Operations Management Tools New Management Studio MDX Query Editor Version Control Support XML/A SQLCMD Command Line Tool Performance Tuning Profiler Enhancements Profiling Analysis Services Exportable Showplan Exportable Deadlock Traces MDAC SNAC Microsoft Installer base setup Support for Active Directory Deployment SQL Client.NET Data Provider Server Cursor Support Asynch Security All Permissions Grantable Fine Grain Administration Rights Separation of Users and Schema Data encryption primitives Replication Auto-tuning Replication Agents Oracle Publication Improved Blob Change Tracking Replication Monitor OLAP and Data Mining Analysis Management Objects Windows Integrated Backup and Restore Web Service/XML for Analysis DTS and DM Integration New Data Mining Algorithms Auto Packaging and Deployment Data Transformation Services New Architecture (DTR + DTP) Complex Control Flows Control Flow Debugging For Each Enumerations Property Mappings Full Data Flow Designer Full DTS Control Flow Designer Graphical Presentation of Pkg Execution Immediate Mode and Project Mode Package (Advanced) Deployment Tools Custom Tasks and Transformations Reporting Services Multiple Output Formats Parameters (Static, Dynamic, Hierarchical) Bulk Delivery of Personalized Content Support Multiple Data Sources STS (Web Parts, Doc Libraries) Visual Design Tool Charting, Sorting, Filtering, Drill-Through Scheduling, Caching Complete Scripting Engine Scale Out architecture Open XML Report Definition Notification Services & SQL Server CE

26 Programación en el motor ¿Qué se puede programar en el motor? Consultas y modificaciones sobre los datos Disparadores (triggers) Agrupar funcionalidad en procedimientos almacenados Funciones definidas de usuario …. Es más, debe programarse el servidor XQuery – consulta sobre tipo de datos XML T-SQL – extensión a SQL NET integrado en el motor - lenguajes Cada cosa es para lo que es ¿Qué se puede programar en el motor? Consultas y modificaciones sobre los datos Disparadores (triggers) Agrupar funcionalidad en procedimientos almacenados Funciones definidas de usuario …. Es más, debe programarse el servidor XQuery – consulta sobre tipo de datos XML T-SQL – extensión a SQL NET integrado en el motor - lenguajes Cada cosa es para lo que es

27 Programación en el Motor Ejemplos T-SQL CREATE PROCEDURE CustOrdersOrders @CustomerID nchar(5) AS SELECT OrderID, OrderDate, RequiredDate, ShippedDate FROM Orders WHERE CustomerID = @CustomerID ORDER BY OrderID -- Exec CustOrdersOrders ander CREATE PROCEDURE CustOrdersOrders @CustomerID nchar(5) AS SELECT OrderID, OrderDate, RequiredDate, ShippedDate FROM Orders WHERE CustomerID = @CustomerID ORDER BY OrderID -- Exec CustOrdersOrders ander

28 Programación en el Motor Ejemplos T-SQL create proc dbo.dt_isundersourcecontrol @vchLoginName varchar(255) = '', @vchPassword varchar(255) = '', @iWhoToo int = 0 /* 0 => Just check project; 1 => get list of objs */ as set nocount on declare @iReturn int declare @iObjectId int select @iObjectId = 0 declare @VSSGUID varchar(100) select @VSSGUID = 'SQLVersionControl.VCS_SQL' declare @iReturnValue int select @iReturnValue = 0 declare @iStreamObjectId int select @iStreamObjectId = 0 declare @vchTempText varchar(255) declare @iPropertyObjectId int select @iPropertyObjectId = (select objectid from dbo.dtproperties where property = 'VCSProjectID') declare @vchProjectName varchar(255) declare @vchSourceSafeINI varchar(255) declare @vchServerName varchar(255) declare @vchDatabaseName varchar(255) exec dbo.dt_getpropertiesbyid_vcs @iPropertyObjectId, 'VCSProject', @vchProjectName OUT exec dbo.dt_getpropertiesbyid_vcs @iPropertyObjectId, 'VCSSourceSafeINI', @vchSourceSafeINI OUT exec dbo.dt_getpropertiesbyid_vcs @iPropertyObjectId, 'VCSSQLServer', @vchServerName OUT exec dbo.dt_getpropertiesbyid_vcs @iPropertyObjectId, 'VCSSQLDatabase', @vchDatabaseName OUT if (@vchProjectName = '')set @vchProjectName = null if (@vchSourceSafeINI = '') set @vchSourceSafeINI= null if (@vchServerName = '')set @vchServerName = null if (@vchDatabaseName = '')set @vchDatabaseName= null if (@vchProjectName is null) or (@vchSourceSafeINI is null) or (@vchServerName is null) or (@vchDatabaseName is null) begin RAISERROR('Not Under Source Control',16,-1) return end if @iWhoToo = 1 begin /* Get List of Procs in the project */ exec @iReturn = master.dbo.sp_OACreate @VSSGUID, @iObjectId OUT if @iReturn <> 0 GOTO E_OAError exec @iReturn = master.dbo.sp_OAMethod @iObjectId, 'GetListOfObjects',NULL,@vchProjectName, @vchSourceSafeINI,@vchServerName, @vchDatabaseName,@vchLoginName, @vchPassword if @iReturn <> 0 GOTO E_OAError exec @iReturn = master.dbo.sp_OAGetProperty @iObjectId, 'GetStreamObject', @iStreamObjectId OUT if @iReturn <> 0 GOTO E_OAError create table #ObjectList (id int identity, vchObjectlist varchar(255)) select @vchTempText = 'STUB' while @vchTempText is not null begin exec @iReturn = master.dbo.sp_OAMethod @iStreamObjectId, 'GetStream', @iReturnValue OUT, @vchTempText OUT if @iReturn <> 0 GOTO E_OAError if (@vchTempText = '') set @vchTempText = null if (@vchTempText is not null) insert into #ObjectList (vchObjectlist ) select @vchTempText end select vchObjectlist from #ObjectList order by id end CleanUp: return E_OAError: exec dbo.dt_displayoaerror @iObjectId, @iReturn goto CleanUp create proc dbo.dt_isundersourcecontrol @vchLoginName varchar(255) = '', @vchPassword varchar(255) = '', @iWhoToo int = 0 /* 0 => Just check project; 1 => get list of objs */ as set nocount on declare @iReturn int declare @iObjectId int select @iObjectId = 0 declare @VSSGUID varchar(100) select @VSSGUID = 'SQLVersionControl.VCS_SQL' declare @iReturnValue int select @iReturnValue = 0 declare @iStreamObjectId int select @iStreamObjectId = 0 declare @vchTempText varchar(255) declare @iPropertyObjectId int select @iPropertyObjectId = (select objectid from dbo.dtproperties where property = 'VCSProjectID') declare @vchProjectName varchar(255) declare @vchSourceSafeINI varchar(255) declare @vchServerName varchar(255) declare @vchDatabaseName varchar(255) exec dbo.dt_getpropertiesbyid_vcs @iPropertyObjectId, 'VCSProject', @vchProjectName OUT exec dbo.dt_getpropertiesbyid_vcs @iPropertyObjectId, 'VCSSourceSafeINI', @vchSourceSafeINI OUT exec dbo.dt_getpropertiesbyid_vcs @iPropertyObjectId, 'VCSSQLServer', @vchServerName OUT exec dbo.dt_getpropertiesbyid_vcs @iPropertyObjectId, 'VCSSQLDatabase', @vchDatabaseName OUT if (@vchProjectName = '')set @vchProjectName = null if (@vchSourceSafeINI = '') set @vchSourceSafeINI= null if (@vchServerName = '')set @vchServerName = null if (@vchDatabaseName = '')set @vchDatabaseName= null if (@vchProjectName is null) or (@vchSourceSafeINI is null) or (@vchServerName is null) or (@vchDatabaseName is null) begin RAISERROR('Not Under Source Control',16,-1) return end if @iWhoToo = 1 begin /* Get List of Procs in the project */ exec @iReturn = master.dbo.sp_OACreate @VSSGUID, @iObjectId OUT if @iReturn <> 0 GOTO E_OAError exec @iReturn = master.dbo.sp_OAMethod @iObjectId, 'GetListOfObjects',NULL,@vchProjectName, @vchSourceSafeINI,@vchServerName, @vchDatabaseName,@vchLoginName, @vchPassword if @iReturn <> 0 GOTO E_OAError exec @iReturn = master.dbo.sp_OAGetProperty @iObjectId, 'GetStreamObject', @iStreamObjectId OUT if @iReturn <> 0 GOTO E_OAError create table #ObjectList (id int identity, vchObjectlist varchar(255)) select @vchTempText = 'STUB' while @vchTempText is not null begin exec @iReturn = master.dbo.sp_OAMethod @iStreamObjectId, 'GetStream', @iReturnValue OUT, @vchTempText OUT if @iReturn <> 0 GOTO E_OAError if (@vchTempText = '') set @vchTempText = null if (@vchTempText is not null) insert into #ObjectList (vchObjectlist ) select @vchTempText end select vchObjectlist from #ObjectList order by id end CleanUp: return E_OAError: exec dbo.dt_displayoaerror @iObjectId, @iReturn goto CleanUp select @vchTempText = 'STUB' while @vchTempText is not null while @vchTempText is not null begin begin exec @iReturn = ster.dbo.sp_OAMethod exec @iReturn = ster.dbo.sp_OAMethod @iStreamObjectId, 'GetStream', @iReturnValue OUT, @vchTempText OUT if @iReturn <> 0 GOTO E_OAError if @iReturn <> 0 GOTO E_OAError if (@vchTempText = '') if (@vchTempText = '') set @vchTempText = null if (@vchTempText is not null) if (@vchTempText is not null) insert into #ObjectList insert into #ObjectList (vchObjectlist ) select @vchTempText select @vchTempText end end

29 Prodecimiento almacenado desde ADO.NET

30 Programación en el Motor.NET Se desarrolla con Visual Studio 2005 Depuración, puntos de interrupción :O Los ensamblados se almacenan en SQL Server 2005 Permite extender el sistema Funciones escalares Tipos Triggers Agregados Procedimientos Acceso a datos Se desarrolla con Visual Studio 2005 Depuración, puntos de interrupción :O Los ensamblados se almacenan en SQL Server 2005 Permite extender el sistema Funciones escalares Tipos Triggers Agregados Procedimientos Acceso a datos SQL Engine Windows SQL OS CLR HostingLayer

31 Procedimiento almacenado Desarrollar, desplegar y depurar con Visual Studio 2005 Procedimiento almacenado Desarrollar, desplegar y depurar con Visual Studio 2005

32 Permission Sets

33 Programación en el Motor ¿Cuándo.NET? Procesos complejos Impuestos, descuentos, cálculos matemáticos Acceso a recursos externos Ficheros, sockets, Servicios web, … Proceso de imágenes Aplicaciones científicas Gestión de cadenas Depuración Localización ¿Cuándo.NET? Procesos complejos Impuestos, descuentos, cálculos matemáticos Acceso a recursos externos Ficheros, sockets, Servicios web, … Proceso de imágenes Aplicaciones científicas Gestión de cadenas Depuración Localización

34 Tecnología Utilizada SQL Server 2005 A la vieja usanza…. declare @str varchar(200) select @Str = 'Microsoft Corporation|SQL Server|2003|SQL-CLR|2002-08-20|11:32:00|Document|3.b.3' SELECT substring(@Str + '|', 0 + 1, charindex('|', @Str + '|', 0 + 1) - 0 - 1 ), charindex('|', @Str + '|', 0 + 1) - 0 - 1 ), substring(@Str + '|', charindex('|', @Str + '|') + 1, charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) - charindex('|', @Str + '|') + 1) - charindex('|', @Str + '|') - 1 ), charindex('|', @Str + '|') - 1 ), substring(@Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1, charindex('|', @Str + '|') + 1) + 1, charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) - charindex('|', @Str + '|') + 1) + 1) - charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) - 1 ), charindex('|', @Str + '|') + 1) - 1 ), substring(@Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1, charindex('|', @Str + '|') + 1) + 1) + 1, charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) - charindex('|', @Str + '|') + 1) + 1) + 1) - charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) - 1 ), charindex('|', @Str + '|') + 1) + 1) - 1 ), substring(@Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1, charindex('|', @Str + '|') + 1) + 1) + 1) + 1, charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) - charindex('|', @Str + '|') + 1) + 1) + 1) + 1) - charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) - 1 ), charindex('|', @Str + '|') + 1) + 1) + 1) - 1 ), substring(@Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1, charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1, charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) - charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) - charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) - 1 ), charindex('|', @Str + '|') + 1) + 1) + 1) + 1) - 1 ), substring(@Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1, charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1, charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) - charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) - charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) - 1 ), charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) - 1 ), substring(@Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) + 1, charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) + 1, charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) + 1) - charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) + 1) - charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) - 1 ) charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) - 1 ) declare @str varchar(200) select @Str = 'Microsoft Corporation|SQL Server|2003|SQL-CLR|2002- 08-20|11:32:00|Document|3.b.3' SELECT substring(@Str + '|', 0 + 1, charindex('|', @Str + '|', 0 + 1) - 0 - 1 ), charindex('|', @Str + '|', 0 + 1) - 0 - 1 ), substring(@Str + '|', charindex('|', @Str + '|') + 1, charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) - charindex('|', @Str + '|') + 1) - charindex('|', @Str + '|') - 1 ), charindex('|', @Str + '|') - 1 ), substring(@Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1, charindex('|', @Str + '|') + 1) + 1, charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) - charindex('|', @Str + '|') + 1) + 1) - charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) - 1 ), charindex('|', @Str + '|') + 1) - 1 ), substring(@Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1, charindex('|', @Str + '|') + 1) + 1) + 1, charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) - charindex('|', @Str + '|') + 1) + 1) + 1) - charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) - 1 ), charindex('|', @Str + '|') + 1) + 1) - 1 ), substring(@Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1, charindex('|', @Str + '|') + 1) + 1) + 1) + 1, charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) - charindex('|', @Str + '|') + 1) + 1) + 1) + 1) - charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) - 1 ), charindex('|', @Str + '|') + 1) + 1) + 1) - 1 ), substring(@Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1, charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1, charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) - charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) - charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) - 1 ), charindex('|', @Str + '|') + 1) + 1) + 1) + 1) - 1 ), substring(@Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1, charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1, charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) - charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) - charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) - 1 ), charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) - 1 ), substring(@Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) + 1, charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) + 1, charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) + 1) - charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) + 1) - charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|', charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) - 1 ) charindex('|', @Str + '|') + 1) + 1) + 1) + 1) + 1) + 1) - 1 )

35 Tecnología Utilizada SQL Server 2005 public static void SplitString() { string s; string s; s = Microsoft s = Microsoft Corporation|SQLServer|2003|SQL-CLR|2004- 08-20|22:00:00|Document|3.b.3; string[] miArray = s.Split(s, "|"); string[] miArray = s.Split(s, "|");} Ahora tenemos la posibilidad de…

36 Recursos www.siquelnet.com [1] www.portalsql.com [2] www.helpdna.net www.solidqualitylearning.com www.sqljunkies.com News de Microsoft Grupo de usuarios de SqlServer [1] y [2] www.siquelnet.com [1] www.portalsql.com [2] www.helpdna.net www.solidqualitylearning.com www.sqljunkies.com News de Microsoft Grupo de usuarios de SqlServer [1] y [2]

37 ¿ Preguntas ? ¿ Preguntas ? Gracias Gracias

38 © 2004, 2005 Microsoft Corporation. Todos los derechos reservados. Esta presentación tiene propósito informativo únicamente. Microsoft no ofrece ninguna garantía, expresa o implítica, en este documento.


Descargar ppt "ADO.NET y SQL Server 2005 ADO.NET y SQL Server 2005 David Salgado MVP C# David Salgado MVP C#"

Presentaciones similares


Anuncios Google