Procedimientos almacenados en C - PowerPoint PPT Presentation

1 / 24
About This Presentation
Title:

Procedimientos almacenados en C

Description:

Las aplicaciones corren en el mismo espacio de direcciones que ... Los procedimientos almacenados extendidos no se pueden revisar para evitar c digo peligroso ... – PowerPoint PPT presentation

Number of Views:151
Avg rating:3.0/5.0
Slides: 25
Provided by: edgars9
Category:

less

Transcript and Presenter's Notes

Title: Procedimientos almacenados en C


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
  • Las aplicaciones corren en el mismo espacio de
    direcciones que SQL Server
  • Procedimientos almacenados en cualquier lenguaje
    soportado por el CLR
  • Acceso a recursos fuera de SQL Server

3
CĂłdigo procedimental en SQL Server 2005
  • SQL Server 2005 soporta cĂłdigo en cualquier
    lenguaje .NET
  • Procedimientos almacenados
  • Funciones definidas por el usuario (UDFs)
  • Triggers
  • 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Ă­
  • Sujeto a las reglas de SQL Server
  • Los parámetros .NET deben ajustarse a T-SQL
  • 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
  • Es compilado y no interpretado como lo son los
    procedimientos almacenados T-SQL
  • El cĂłdigo .NET es seguro
  • La seguridad del cĂłdigo es revisada cuando se
    cataloga
  • 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
  • SĂłlo se aceptan mĂ©todos, clases y assemblies
    especĂ­ficos
  • Consideraciones de seguridad
  • Vigilado cuando
  • El assembly es catalogado
  • El cĂłdigo es ejecutado

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

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

9
Procedimientos .NET y Transact-SQL
  • Transact-SQL es mejor para cĂłdigo centrado en
    acceso a datos
  • No se carga el runtime de .NET
  • Acceso directo a la capa de datos
  • ProgramaciĂłn procedimental
  • .NET es mejor para cĂłdigo que no accese a datos
  • FĂłrmulas matemáticas
  • Acceso a recursos del sistema fuera de SQL Server
  • ProgramaciĂłn orientada a objetos
  • Ambos tipos de cĂłdigo
  • Guardan y cargan cĂłdigo desde la base de datos
  • Basados en estándares ANSI
  • 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

10
CatalogaciĂłn de cĂłdigo .NET
  • El cĂłdigo procedimental .NET debe ser catalogado
  • Las funciones procedimentales .NET deben ser
    catalogadas

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

12
Nombres externos de funciones
  • Los nombres externos se componen de tres partes
  • El nombre simbĂłlico del assembly es separado por
    '.'
  • Nombre completo de la clase, en apĂłstrofes o
    corchetes en el namespace .NET
  • El nombre de funciĂłn separado por '.'
  • El nombre del assembly no distingue mayĂşsculas de
    minĂşsculas
  • El nombre de la clase y el mĂ©todo si los
    distingue
  • 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
  • System.Data.SqlServer
  • System.Data.SqlClient
  • Los modelos de programaciĂłn tienen algunas
    diferencias
  • SqlClient usa una SqlConnection
  • SqlServer usa un SqlContext

14
CĂłdigo fuera de la base de datos
  • El cĂłdigo fuera de la base de datos necesita
    establecer una conexiĂłn
  • Establecer buffers
  • Iniciar un lote de comandos
  • Iniciar una transacciĂłn o participar en una

15
CĂłdigo dentro de la base de datos
  • SqlServer no necesita una conexiĂłn
  • Una conexiĂłn explĂ­cita desperdicia recursos
  • Los comandos son parte del mismo lote
  • 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 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
  • Pipe permite insertar informaciĂłn en la corriente
    de salida TDS
  • Resultsets y mensajes
  • TriggerContext provee informaciĂłn de contexto
    cuando se ejecuta un trigger
  • Todos los comandos son parte del lote actual
  • Pueden heredar la transacciĂłn actual
  • No afectan al nivel de anidamiento transaccional

17
Resultados de comandos
  • El acceso a SQL Server produce uno de cuatro
    tipos de resultados
  • Cuenta de filas afectadas por el comando
  • 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 multi-fila, p.ej. Un conjunto de
    facturas pendientes

18
Resultado escalar
  • Producido por SqlCommand.ExecuteScalar
  • La manera más eficiente y simple de obtener un
    valor escalar
  • Usado para obtener un valor agregado
  • Usado para obtener un valor devuelto por un
    procedimiento almacenado
  • Se debe convertir al tipo apropiado

FunciĂłn agregada
cmd.CommandText"select count() from
authors" int count (int)cmd.ExecuteScalar()
Obtener el resultado escalar
ConversiĂłn al tipo apropiado
19
Resultado con una sola fila
  • Producido por SqlCommand.ExecuteRow
  • Devuelve un ISqlRecord, puede ser convertido a
    IDataRecord
  • Usar solo cuando se espera una Ăşnica fila
  • La fila es de lectura solamente
  • Todas las filas son devueltas pero solo la
    primera es accesible, la consulta debe limitar a
    una sola

Limitar a una sola fila
cmd.CommandText"Select top 1 from
authors" ISqlRecord row cmd.ExecuteRow() Strin
g lastName row.GetString(1)
Obtener el resultado de una sola fila
20
Resultado multi-fila
  • Producido por SqlCommand.ExecuteReader
  • SqlDataReader es muy liviano
  • Comportamiento forward-only, read-only
  • Se puede devolver al cliente

El resultado será read-only
SqlDataReader rdr cmd.ExecuteReader()while(rdr
.Read() true) // trabajar con la fila
MĂ­nimo derecursos utilizado
21
Funciones que devuelven tablas y ISqlReader
  • El proveedor SqlServer puede devolver una TABLE a
    través de una UDF
  • Se declara como otras UDFs, el valor retornado es
    un ISqlReader
  • 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
  • Se puede obtener en SqlContext.TriggerContext
  • Contiene a la enumeraciĂłn Trigger.Action
  • INSERT, UPDATE, or DELETE
  • Contiene IsUpdatedColumn()
  • Booleano que dice si una columna está siendo
    actualizada
  • Se puede obtener EventData
  • Para triggers extendidos y mayor control

23
Uso de SqlTriggerContext
public static void DontInsertSpecialID()
using(SqlConnection conexion new
SqlConnection("context connectiontrue"))
SqlTriggerContext tc SqlContext.TriggerContext
if (tc.TriggerAction TriggerAction.Inser
t) SqlCommand cmd new SqlCommand()
cmd.CommandText "select count() from
inserted " "where au_id
'111-11-1111'" cmd.Connection
conexion if ((int)cmd.ExecuteScalar() gt
0) cmd.CommandText "ROLLBACK
TRANSACTION" SqlContext.Pipe.Execute(cmd
)
24
Preguntas?
  • 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 0321180593
Write a Comment
User Comments (0)
About PowerShow.com