La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Procedimientos almacenados en C# Edgar Sánchez Logic Studio Director Regional de Microsoft, Ecuador.

Presentaciones similares


Presentación del tema: "Procedimientos almacenados en C# Edgar Sánchez Logic Studio Director Regional de Microsoft, Ecuador."— Transcripción de la presentación:

1 Procedimientos almacenados en C# Edgar Sánchez Logic Studio Director Regional de Microsoft, Ecuador

2 CLR hospedado El CLR de.NET se hospeda dentro de SQL Server para mejorar el rendimiento El CLR de.NET se hospeda dentro de SQL Server para mejorar el rendimiento Las aplicaciones corren en el mismo espacio de direcciones que SQL Server Las aplicaciones corren en el mismo espacio de direcciones que SQL Server Procedimientos almacenados en cualquier lenguaje soportado por el CLR Procedimientos almacenados en cualquier lenguaje soportado por el CLR Acceso a recursos fuera de SQL Server Acceso a recursos fuera de SQL Server Código.NET Función T-SQL Base de datos Proceso de SQL Server

3 Código procedimental en SQL Server 2005 SQL Server 2005 soporta código en cualquier lenguaje.NET SQL Server 2005 soporta código en cualquier lenguaje.NET Procedimientos almacenados Procedimientos almacenados Funciones definidas por el usuario (UDFs) Funciones definidas por el usuario (UDFs) Triggers Triggers El runtime de.NET se carga con el primer acceso El runtime de.NET se carga con el primer acceso

4 El código.NET y Transact SQL El código.NET y T-SQL se pueden invocar entre sí El código.NET y T-SQL se pueden invocar entre sí Sujeto a las reglas de SQL Server Sujeto a las reglas de SQL Server Los parámetros.NET deben ajustarse a T- SQL Los parámetros.NET deben ajustarse a T- SQL Tanto el código.NET como T-SQL tienen escenarios adecuados de uso Tanto el código.NET como T-SQL tienen escenarios adecuados de uso

5 El código.NET es rápido y seguro El código.NET puede ser más rápido en algunos casos El código.NET puede ser más rápido en algunos casos Es compilado y no interpretado como lo son los procedimientos almacenados T- SQL Es compilado y no interpretado como lo son los procedimientos almacenados T- SQL El código.NET es seguro El código.NET es seguro La seguridad del código es revisada cuando se cataloga La seguridad del código es revisada cuando se cataloga Los procedimientos almacenados extendidos no se pueden revisar para evitar código peligroso Los procedimientos almacenados extendidos no se pueden revisar para evitar código peligroso

6 El código.NET y el framework El código.NET puede usar el.NET Framework El código.NET puede usar el.NET Framework Sólo se aceptan métodos, clases y assemblies específicos Sólo se aceptan métodos, clases y assemblies específicos Consideraciones de seguridad Consideraciones de seguridad Vigilado cuando Vigilado cuando El assembly es catalogado El assembly es catalogado El código es ejecutado El código es ejecutado

7 T-SQL es mejor para acceso a datos T-SQL es mejor para acceso a datos No hay coerción de tipos No hay coerción de tipos Todo el código pre-SQL Server 2005 está escrito en T-SQL Todo el código pre-SQL Server 2005 está escrito en T-SQL SQL Server 2005 agrega el manejo de excepciones a T-SQL SQL Server 2005 agrega el manejo de excepciones a T-SQL Acceso a datos con Transact- SQL

8 Transact-SQL puede ser más rápido T-SQL puede ser más rápido para acceso a datos T-SQL puede ser más rápido para acceso a datos Acceso directo a los buffers internos de SQL Server Acceso directo a los buffers internos de SQL Server Biblioteca de funciones rica y centrada en datos Biblioteca de funciones rica y centrada en datos No hay conversión de tipos No hay conversión de tipos

9 Procedimientos.NET y Transact-SQL Transact-SQL es mejor para código centrado en acceso a datos Transact-SQL es mejor para código centrado en acceso a datos No se carga el runtime de.NET No se carga el runtime de.NET Acceso directo a la capa de datos Acceso directo a la capa de datos Programación procedimental Programación procedimental.NET es mejor para código que no accese a datos.NET es mejor para código que no accese a datos Fórmulas matemáticas Fórmulas matemáticas Acceso a recursos del sistema fuera de SQL Server Acceso a recursos del sistema fuera de SQL Server Programación orientada a objetos Programación orientada a objetos Ambos tipos de código Ambos tipos de código Guardan y cargan código desde la base de datos Guardan y cargan código desde la base de datos Basados en estándares ANSI Basados en estándares ANSI Transact-SQL es una variación de la norma ANSI SQL PSM Transact-SQL es una variación de la norma ANSI SQL PSM El código.NET es similar a la especificación ANSI SQL JRT El código.NET es similar a la especificación ANSI SQL JRT

10 Catalogación de código.NET El código procedimental.NET debe ser catalogado El código procedimental.NET debe ser catalogado Las funciones procedimentales.NET deben ser catalogadas Las funciones procedimentales.NET deben ser catalogadas public class Math { public static int invert() {... } public static int not() {...} } Arith.dll CREATE ASSEMBLY Arith... go CREATE FUNCTION invert... CREATE FUNCTION not...

11 Mapeo de nombres T-SQL Nombre T-SQL debe mapearse al nombre.NET Nombre T-SQL debe mapearse al nombre.NET El nombre.NET se denomina nombre externo El nombre.NET se denomina nombre externo El nombre externo es delimitado por assembly, namespace y clase El nombre externo es delimitado por assembly, namespace y clase

12 Nombres externos de funciones Los nombres externos se componen de tres partes Los nombres externos se componen de tres partes El nombre simbólico del assembly es separado por '.' El nombre simbólico del assembly es separado por '.' Nombre completo de la clase, en apóstrofes o corchetes en el namespace.NET Nombre completo de la clase, en apóstrofes o corchetes en el namespace.NET El nombre de función separado por '.' El nombre de función separado por '.' El nombre del assembly no distingue mayúsculas de minúsculas El nombre del assembly no distingue mayúsculas de minúsculas El nombre de la clase y el método si los distingue El nombre de la clase y el método si los distingue Aún si el lenguaje.NET no lo hace Aún si el lenguaje.NET no lo hace GEO.[Math.Arith].invert

13 Modelo de programación SQL Server SQL Server 2005 incluye dos proveedores de datos SQL Server 2005 incluye dos proveedores de datos System.Data.SqlServer System.Data.SqlServer System.Data.SqlClient System.Data.SqlClient Los modelos de programación tienen algunas diferencias Los modelos de programación tienen algunas diferencias SqlClient usa una SqlConnection SqlClient usa una SqlConnection SqlServer usa un SqlContext SqlServer usa un SqlContext Database System.Data.SqlClient Connection Select * from... SqlConnection Microsoft.SqlServer.Server SqlContext Select * from...

14 Código fuera de la base de datos El código fuera de la base de datos necesita establecer una conexión El código fuera de la base de datos necesita establecer una conexión Establecer buffers Establecer buffers Iniciar un lote de comandos Iniciar un lote de comandos Iniciar una transacción o participar en una Iniciar una transacción o participar en una Database System.Data.SqlClient Input Buffer Output Buffer Transaction Connection Socket

15 Código dentro de la base de datos SqlServer no necesita una conexión SqlServer no necesita una conexión Una conexión explícita desperdicia recursos Una conexión explícita desperdicia recursos Los comandos son parte del mismo lote Los comandos son parte del mismo lote El código que se ejecuta puede ser ya parte de una transacción El código que se ejecuta puede ser ya parte de una transacción El contexto provee acceso directo a la base de datos El contexto provee acceso directo a la base de datos El código corre como si fuera parte de la base de datos El código corre como si fuera parte de la base de datos

16 SqlContext SqlContext representa el contexto actual de ejecución en el SQL Server SqlContext representa el contexto actual de ejecución en el SQL Server Pipe permite insertar información en la corriente de salida TDS Pipe permite insertar información en la corriente de salida TDS Resultsets y mensajes Resultsets y mensajes TriggerContext provee información de contexto cuando se ejecuta un trigger TriggerContext provee información de contexto cuando se ejecuta un trigger Todos los comandos son parte del lote actual Todos los comandos son parte del lote actual Pueden heredar la transacción actual Pueden heredar la transacción actual No afectan al nivel de anidamiento transaccional No afectan al nivel de anidamiento transaccional

17 Resultados de comandos El acceso a SQL Server produce uno de cuatro tipos de resultados El acceso a SQL Server produce uno de cuatro tipos de resultados Cuenta de filas afectadas por el comando Cuenta de filas afectadas por el comando Resultado escalar, p.ej. Un agregado como el total de ventas Resultado escalar, p.ej. Un agregado como el total de ventas Resultado con una sola fila, p.ej. Una dirección de un vendedor Resultado con una sola fila, p.ej. Una dirección de un vendedor Resultado multi-fila, p.ej. Un conjunto de facturas pendientes Resultado multi-fila, p.ej. Un conjunto de facturas pendientes

18 Resultado escalar Producido por SqlCommand.ExecuteScalar Producido por SqlCommand.ExecuteScalar La manera más eficiente y simple de obtener un valor escalar La manera más eficiente y simple de obtener un valor escalar Usado para obtener un valor agregado Usado para obtener un valor agregado Usado para obtener un valor devuelto por un procedimiento almacenado Usado para obtener un valor devuelto por un procedimiento almacenado Se debe convertir al tipo apropiado Se debe convertir al tipo apropiado cmd.CommandText="select count(*) from authors"; int count = (int)cmd.ExecuteScalar(); Función agregada Obtener el resultado escalar Conversión al tipo apropiado

19 Resultado con una sola fila Producido por SqlCommand.ExecuteRow Producido por SqlCommand.ExecuteRow Devuelve un ISqlRecord, puede ser convertido a IDataRecord Devuelve un ISqlRecord, puede ser convertido a IDataRecord Usar solo cuando se espera una única fila Usar solo cuando se espera una única fila La fila es de lectura solamente La fila es de lectura solamente Todas las filas son devueltas pero solo la primera es accesible, la consulta debe limitar a una sola Todas las filas son devueltas pero solo la primera es accesible, la consulta debe limitar a una sola cmd.CommandText="Select top 1 * from authors"; ISqlRecord row = cmd.ExecuteRow(); String lastName = row.GetString(1); Limitar a una sola fila Obtener el resultado de una sola fila

20 Resultado multi-fila Producido por SqlCommand.ExecuteReader Producido por SqlCommand.ExecuteReader SqlDataReader es muy liviano SqlDataReader es muy liviano Comportamiento forward-only, read-only Comportamiento forward-only, read-only Se puede devolver al cliente Se puede devolver al cliente SqlDataReader rdr = cmd.ExecuteReader(); while(rdr.Read() == true) { // trabajar con la fila } El resultado será read-only Mínimo de recursos utilizado

21 Funciones que devuelven tablas y ISqlReader El proveedor SqlServer puede devolver una TABLE a través de una UDF El proveedor SqlServer puede devolver una TABLE a través de una UDF Se declara como otras UDFs, el valor retornado es un ISqlReader Se declara como otras UDFs, el valor retornado es un ISqlReader Devolver SqlDataReader no es soportado Devolver SqlDataReader no es soportado public static ISqlReader myTVF(SqlString region) { ISqlReader irdr = null; // obtener una clase que implementa ISqlReader // poblar el objeto ISqlReader return(irdr); }

22 SqlTriggerContext SqlTriggerContext es el ambiente dentro de un trigger SqlTriggerContext es el ambiente dentro de un trigger Se puede obtener en SqlContext.TriggerContext Se puede obtener en SqlContext.TriggerContext Contiene a la enumeración Trigger.Action Contiene a la enumeración Trigger.Action INSERT, UPDATE, or DELETE INSERT, UPDATE, or DELETE Contiene IsUpdatedColumn() Contiene IsUpdatedColumn() Booleano que dice si una columna está siendo actualizada Booleano que dice si una columna está siendo actualizada Se puede obtener EventData Se puede obtener EventData Para triggers extendidos y mayor control Para triggers extendidos y mayor control

23 Uso de SqlTriggerContext public static void DontInsertSpecialID() { using(SqlConnection conexion = new SqlConnection("context connection=true")) { SqlTriggerContext tc = SqlContext.TriggerContext; if (tc.TriggerAction == TriggerAction.Insert) { SqlCommand cmd = new SqlCommand(); cmd.CommandText = "select count(*) from inserted " + "where au_id = ' '"; cmd.Connection = conexion; if ((int)cmd.ExecuteScalar() > 0) { cmd.CommandText = "ROLLBACK TRANSACTION"; SqlContext.Pipe.Execute(cmd); }

24 ¿Preguntas? Lectura recomendada: Lectura recomendada: A First Look at Microsoft SQL Server 2005 for Developers Bob Beauchemin, Niels Berglund, Dan Sullivan Addison-Wesley Professional; 1st edition (June 25, 2004) ISBN:


Descargar ppt "Procedimientos almacenados en C# Edgar Sánchez Logic Studio Director Regional de Microsoft, Ecuador."

Presentaciones similares


Anuncios Google