Archive

Archive for the ‘ADO.NET’ Category

Descubre ASP.NET 4.0

noviembre 4, 2008 Deja un comentario

Estos últimos días han sido de muchas ilusiones gracias a lo que se mostro en el pasado PDC, y para los desarrolladores de aplicaciones Web también existen, gracias a lo que promete ser la versión 4.0 de ASP.NET, para dar rienda suelta a nuestra imaginación pensando en lo que podremos hacer, aquí algunas de sus características.

image

NET Framework 4.0 y Visual Studio .NET 2010
– Multiples versiones del .NET Framework en VS10 (2.0, 3.5, 4.0)
– .NET Framework 4.0 será compatible completamente con el .NET FX 3.5
– Out of band releases (eg Dynamic Data) roll-up into Fx 4.0
ASP.NET 4.0
– Major plataforma para estandares de desarrollo web
– Soporte a modelos de desarrollo basado en patrones (MVC, TDD)
– Mejoras significativas en el core de ASP.NET (Webforms, Core infrastructure, MVC, Data and Dynamic Data, AJAX)
Web Forms
– Client IDs (more control)
– CSS(Remove the need for CSS adapters, Defer to CSS styles & bypass style properties, Support non-table-based HTML rendering)
– URL Routing (Friendly URLs, Config model for URL routing)
– Viewstate( Disable on page & enable on certain controls, Disable on control & enable on children, GridView / ListView work better without Viewstate)
– ASP.NET Dynamic Data

ASP.NET AJAX
– Continúa la innovacion en ASP.NET AJAX
– Appeal to JS devs
– Provide support for the page developer
– Intellisense incluido en jQuery
– Templates & Databinding
– AJAX Control Toolkit forma parte de ASP.NET
– Centralised script libraries y break-up for better performance

ASP.NET MVC
– More tooling support coming – perhaps some scaffolding like capabilities (create pages for you when you point at an object)
– Async controllers
– Sub-controllers & views
– Declarative controls + form validation

ASP.NET Dynamic Data
– Dynamic Data and MVC(Scaffolding, templates and data-validation)
– Support for abstract data-layer
– Allows scaffolding of objects
– Support for many to many relationships
– Enhanced filtering
– Enhanced metadata(Control over column ordering and filtering)
– New field templates
– DataSource controls (Linq, Entity & Custom Object) enhanced with WhereExpression, SearchExpression, RangeExplression making it easy to create custom filtering
– Dynamic Data over ADO.NET Data Services – just point Dynamic Data at a Data

 

más información http://www.asp.net/

 

[SQL]Procedimientos almacenados paso a paso

octubre 31, 2008 35 comentarios

Un procedimiento almacenado (store procedure) no es más que una secuencia ordenada de instrucciones T-SQL, que pueden recibir y proporcionar parámetros provistos por el usuario y se pueden guardar en el servidor con un nombre, para posteriormente se invocados y ejecutados, por lo regular desde una aplicación (Escritorio o Web). Desde la versión 2005, se incorpora la posibilidad de utilizar procedimientos almacenados usando el CLR de .NET. Es decir tenemos dos tipos de procedimientos almacenados.

Un procedimiento almacendado CLR es una referencia a un método de un ensamble (dll) de .NET Framework que puede aceptar y devolver parámetros suministrados por el usuario.

Ventajas de usar SP

  • Compilación: La primera vez que se invoca un SP, el motor lo compila y a partir de ahí, se sigue usando la versión compilada del mismo, hasta que se modifique o se reinicie el servicio de SQL. Esto siginifica que se tendrá un mejor rendimiento que las consultas directas que usan cadenas con las instrucciones T-SQL, que se compilan cada vez que se invocan.
  • Automatización: si tenemos un conjunto de instrucciones T-SQL, las cuales queremos ejecutar de manera ordenada, un SP es la mejor manera de hacerlo.
  • Administración: cuando realizamos aplicaciones con un gran numero de lineas de código, y queremos hacer cambios, solo implica modificar un SP y no toda la aplicación, lo que significa solo cambiamos los SP en el servidor y no tenemos que actualizar la aplicación en todos los equipos cliente.
  • Seguridad: una parte importante es que a los usuarios de nuestra aplicación, solo les proporcionamos los permisos para ejecutar los procedimientos almacenados y no el acceso a todos los objetos de la base. Es decir, si en nuestra aplicación encuentran una vulnerabilidad como SLQ Injection no se podrá explotar ejecutando SQL directamente.
  • Programabilidad: Los SP admiten el uso de variables y estructuras de control como IF, Bucles,  Case, etc. además del manejo de transacción y permite controlar excepciones. Y cuando trabajamos con SP CLR podemos hacer uso de cualquier lenguaje .NET como lo son C# y VB.NET.
  • Trafico de Red:  Pueden reducir el trafico de la red, debido a que se trabaja sobre el motor (en el servidor), y si una operación incluye hacer un trabajo de lectura primero y en base a eso realizar algunas operaciones, esos datos que se obtienen no viajan por la red.

Creando un Procedimiento almacenado

Para crear un procedimiento almacenado solo basta con ir a la base de datos desplegar el árbol hasta la parte de programación y luego en procedimientos almacenados y damos clic derecho en nuevo procedimiento almacenado como se ve en la siguiente figura:

image

Lo cual genera el siguiente código:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>
    -- Add the parameters for the stored procedure here
    <@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>,
    <@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END
GO

Es aquí en donde editamos nuestro procedimiento como mejor nos interese, en este caso usando la base de datos Northwind, crearemos un SP sencillo que queda más o menos así:

USE [Northwind]
GO

CREATE PROCEDURE [dbo].[GetAllEmployees]
    -- Add the parameters for the stored procedure here
    @LastName nvarchar(50),
    @FirstName nvarchar(50)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT  LastName, FirstName, Title
    FROM dbo.Employees
    WHERE FirstName = @FirstName AND LastName = @LastName
END

En este sencillo ejemplo, sólo devuelve el empleado especificado (nombre y apellidos), y el titulo a partir de una vista. Este procedimiento almacenado acepta coincidencias exactas de los parámetros pasados.

Para ejecutar el código debemos hacerlo de esta manera:

EXEC dbo.GetAllEmployees 'Davolio', 'Nancy'

Cómo lo consumimos desde una aplicación en .NET, pues de esta manera:

static void Main(string[] args)
        {
            //Creamos una nueva conexion.
            SqlConnection miConn = new SqlConnection("Data Source=NORTABLEPC\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True");

            //Creamos un nuevo comando
            SqlCommand miComm = new SqlCommand();
            //Le asignamos la conexion.
            miComm.Connection = miConn;
            //especificamos que el comando es un stored procedure
            miComm.CommandType = System.Data.CommandType.StoredProcedure;
            //y escribimos el nombre del stored procedure a invocar
            miComm.CommandText = "dbo.GetAllEmployees";
            //Creamos un nuevo parametro
            SqlParameter paramLastName = new SqlParameter();
            paramLastName.ParameterName = "@LastName";
            paramLastName.SqlDbType = System.Data.SqlDbType.NVarChar;
            paramLastName.Value = "Davolio";

            miComm.Parameters.Add(paramLastName);

            SqlParameter paramFirstName = new SqlParameter();
            paramFirstName.ParameterName = "@FirstName";
            paramFirstName.SqlDbType = SqlDbType.NVarChar;
            paramFirstName.Value = "Nancy";
            miComm.Parameters.Add(paramFirstName);
            //Y los agregamos a la coleccion de parametros del comando myComm.Parameters.Add(myParam) 'Creamos un nuevo DataAdapter con nuestro comando.
            SqlDataAdapter miDA = new SqlDataAdapter(miComm);
            //Creamos un dataset para soportar los datos devueltos por el stored procedure
            DataSet EmpleadosDS = new DataSet();
            //Pedimos al Data Adapter que llene el dataset (Esto llama a nuestro comando)
            miDA.Fill(EmpleadosDS);
            //Y lo mostramos por pantalla

            foreach (DataRow row in EmpleadosDS.Tables[0].Rows)
            {
                Console.WriteLine(row["LastName"].ToString() + " " + row[1].ToString() + " " + row[2].ToString());
            }
        }

Procedimientos Almacenados con CLR

En Common Language Runtime (CLR), los procedimientos almacenados se implementan como métodos estáticos públicos en una clase de un ensamblado de Microsoft .NET Framework. El método estático se puede declarar como void o puede devolver un valor entero. Si devuelve un valor entero, éste se trata como el código devuelto desde el procedimiento. Los parámetros que se pasan a un procedimiento almacenado CLR pueden ser cualquiera de los tipos nativos de SQL Server que tengan un equivalente en código administrado. Para que la sintaxis Transact-SQL cree el procedimiento, estos tipos se deben especificar con el equivalente del tipo nativo de SQL más adecuado.

Ejemplo:

Para crear un SP con integración del CLR vamos a usar VS, y creamos un Proyecto de tipo SQL, al que llame StoreProcedure_Demo, lo primero que hace Visual Studio es preguntar el origen de datos, como se ve en la figura siguiente:

image En donde seleccionamos Microsoft SQL Server (SqlClient) y damos clic en continuar. Ahora toca el turno de elegir el Servidor

imageEn donde yo selecciono el servidor NORTABLEPC\SQLEXPRESS, y la base de datos Northwind, luego verifico la conexión y si todo va bien, por ultimo nos pedirá que si queremos habilitar la integración con el CLR, damos clic y listo. Luego damos clic derecho en nuestro proyecto Agregar->Procedimiento almacenado, como se ve en la figura:

image

Al procedimiento lo llamamos: GetEmpleado, damos y damos clic en Aceptar. Ahora vamos a escribir el siguiente código:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure (Name="GetEmpleado")]
    public static void GetEmpleado()
    {
        // Inserte el código aquí
        SqlContext.Pipe.Send("Hola Mundo! son las : " + System.DateTime.Now.ToString() + "\n");
        using (SqlConnection connection = new SqlConnection("context connection=true"))
        {
            connection.Open();
            SqlCommand command = new SqlCommand("SELECT LastName, FirstName FROM Employees", connection);
            SqlDataReader reader = command.ExecuteReader();
            SqlContext.Pipe.Send(reader);
        }

    }
};

En el código anterior solo mandamos un mensaje, y devolvemos un select sencillo de los empleados, Bien para que esto funcione, debemos generar una solución de nuestro proyecto y después una implementación del mismo, esto permite que automáticamente se envié la dll a nuestra base de datos con el nombre de nuestro proyecto, y al mismo tiempo agrega el procedimiento llamado GetEmpledo

image

Ahora solo nos resta ejecutar nuestro procedimiento con la siguiente instrucción:

EXEC dbo.GetEmpleado

Lo interesante de esto, es que una vez que ya hemos llamado al SP, cuando se ejecute de nuevo, ya no se compilara instrucción por instrucción solo se llama al dll y listo, el resultado de ejecutarlo es el siguiente, por un lado manda el resultado y por otro el mensaje de “hola mundo” con la hora de la maquina, como se ve en la figura:

image image

Hasta aquí dejamos este post, ya veremos en otro como ejecutar dichos procedimientos almacenados desde una aplicación. Espero que les sea de utilidad este post  y recuerden si lo creen conveniente tomen 5 min, para votar por este blog en la siguiente página : http://www.blogit.ms/ , voten por https://mspnor.wordpress.com

Saludos!!!

Etiquetas de Technorati: ,,

Acceso conectado a una BD en C#

febrero 12, 2008 32 comentarios

Hace ya varios días que me preguntaron de esto, de hecho ayer un amigo de la escuela y como en los cursos de ADO.NET que tome en mis vacaciones lo recordé, pues ak un pequeño resumen de cómo hacerlo.

La parte más importante o más pesada cuando realizamos un acceso a una base de datos nos la encontramos cuando hacemos la conexión a nuestra base de datos, sin embargo creo que esta tarea es simple siempre y cuando la hagamos de manera correcta, quizá diga que es pesada ya que es la que más recursos del sistema del sistema consume, pero para hacerlo bien debemos tomar en cuenta ciertas cosas:

  • La conexión debe realizarse, siempre que esté dentro de lo posible con los proveedores de acceso nativos, esto porque son más rápidos.
  • La conexión debe de abrirse lo más tarde posible, y de ser posible definir todas las variables que podamos antes de realizar la conexión.
  • La conexión debe cerrarse lo antes posible, siempre y cuando no tengamos la necesidad de usarla posteriormente.

Estas recomendaciones no son exactamente normas de acceso a datos, pero digamos que si las importantes en cuanto al acceso se refiere ya que depende de lo que queramos hacer para tomar una decisión y aplicar una u otra de estas recomendaciones.

En aquellas ocasiones en que sea necesario estar trabajando con la aplicación en estado conectado a la base de datos, lo que vamos a usar en un DataReader.

¿Qué hace un DataReader?

El objeto DataReader recupera un conjunto de valores llenando un pequeño búfer de datos. Si los objetos que hay en el búfer se acaban, el objeto DataReader regresará a la base de datos para recuperar más registros, por lo tanto su el servicio de SQL Server esta detenido o el de alguno de nuestros orígenes de datos esto provocaría un error.

Pero basta de rollos vamos a ver un ejemplo, pero antes necesitamos una base de datos, si tiene una perfecto, sino aquí un post de cómo crear una base de datos con SQL Server, ya que tenemos nuestra base ahora hacemos lo siguiente:

Creamos una aplicación para Windows a la que llamaremos AccesoConectado, como se ve en la figura:

        AccesoConectado1

Dentro ya de nuestro formulario, vamos a trabajar con un DataGridView para mostrar nuestros datos y un botón para mostrarlos, entonces nuestro formulario quedaría así:

                   AccesoConectado2

Ahora vamos agregar un origen de datos a nuestro proyecto para ello damos clic en la pestaña Datos->Agregar nuevo origen de datos lo que hacemos ak es solo utilizar el asistente, así como guardar nuestra cadena de conexión que es la que utilizaremos.

Ya con la base en el proyecto, ahora trabajaremos con ella desde código :-), y es aquí en donde iniciamos con el método LeerBaseDeDatos y el código es el siguiente:

public void leerBaseDeDatos()
        {
            //abrimos la base de datos

            string cadenConexion = "Data Source=.\\SQLEXPRESS;AttachDbFilename='C:\\Users\\nor\\Desktop\\Curso UNAM\\AccesoConectado\\AccesoConectado\\NORTHWND.MDF';" +
                "Integrated Security=True;User Instance=True";
            
            conexionBD = new SqlConnection(cadenConexion);
            conexionBD.Open();

            //creamos una consulta
            string Consulta = "SELECT LastName, FirstName FROM Employees";
            Orden = new SqlCommand(Consulta, conexionBD);

            //ExecuteReader Hacela consulta y devuelve un SqlDataAdapter
            Lector = Orden.ExecuteReader();
            
            //llamamos siempre al método Read antes de aacedera los datos
            if (Lector.Read())
            {
                //asignamos al gridview
                miData = new DataTable();
                miData.Load(Lector);
                dataGridView1.DataSource = miData;
                       
                
            }
            //llamamos siempre al close  una vez finalizada la lectura
            Lector.Close();
        }

Como se pueden dar cuenta, en este método hacemos la conexión a nuestra base, realizamos una consulta sencilla, aplicamos el ExecuteReader que nos devuelve un SqlAdapter, llenamos un data table y lo asignamos a nuestro GridView.

Ahora solo un método más para cerrar nuestro lector y nuestra conexión esto una vez que ya no usamos nuestra base de datos. El método se llama CerrarConexion y el código es este:

public void CerrarConexion()
        {
            //cerramos nuestrs conexion cuando ya no le necesitemos
            if (Lector != null)
                Lector.Close();
            if (conexionBD != null)
                conexionBD.Close();
        }

por último dentro de nuestro evento clic de nuestro botón mandamos llamar estos métodos, aplicando el control de excepciones, y esto queda así:

public void CerrarConexion()
        {
            //cerramos nuestrs conexion cuando ya no le necesitemos
            if (Lector != null)
                Lector.Close();
            if (conexionBD != null)
                conexionBD.Close();
        }

Ahora solo resta crear una solución del proyecto, si todo va bien como parece, ejecutamos y el resultado al dar clic en el botón es algo como lo que se ve en la siguiente figura:

                     Dibujo1

Con esto tenemos ya un acceso de datos y con el DataReader podemos manipular de la misma manera manipular los datos, pero esto lo veremos en otro ejemplo. Aquí el archivo con el código completo.

Acceso  Conectado a una Base de Datos

Saludos!! 🙂

Categorías:ADO.NET, C#

Vídeos o Screencast de Visual Basic 2008 (VB9)

diciembre 29, 2007 Deja un comentario

Hola, así es gracias aun comentario, ak este post en donde están los links para acceder a estos videos o screencast, como los quieran llamar sobre la nueva Versión de Visual Basic, estos son referenetes a LINQ, XML, Intellisense, Extensión de Métodos, Objetos, tipos Implícitos, pero en especial a LINQ.

Espero que les sean de utilidad y a disfrutar, todos están en Ingles, pero creo que son bastante entendibles así que aquí los Links:

wmp Partial Methods in VB9 wmpVB9 – Collection Initialisers
wmpVB Intellisense In VS2008 wmpVB9 – Extension Methods
wmpNamespaces in VB with LINQ to XML wmpVB9 – Implicit Types
wmpQuerying XML in VB with LINQ to XML wmpVB9 – Object Initialisers
wmpCreating XML in VB with LINQ to XML wmpLINQ to SQL- Overview
wmpVB9 – Dynamic Interfaces wmpLINQ to SQL- Data Model
wmpVB9 – Dynamic Identifiers wmpLINQ to SQL- Querying the Database
wmpVB9 – XML Support wmpLINQ to SQL- Updating the Database
wmpVB9 – Pieces of LINQ wmpCreate Excel Spreadsheets using LINQ to XML-
wmpVB9 – Anonymous Types wmpGet Started with LINQ

 

Como siempre digo: ya saben a disfrutar 🙂 y feliz año 2008

Categorías:ADO.NET, LINQ, Screencast, VB.NET, XML

Descarga Microsoft ASP.NET 3.5 Extensions Preview

diciembre 15, 2007 Deja un comentario

Microsoft ASP.NET 3.5 Extensions Preview es un nuevo lanzamiento que proporciona la nueva funcionalidad que es agregada a ASP.NET 3.5 y a ADO.NET en 2008. Si quieren descargarlo como lo dice el post, aquí les dejo la URL:

URL:http://www.microsoft.com/downloads/details.aspx?FamilyId=A9C6BC06-B894-4B11-8300-35BD2F8FC908&displaylang=en

Categorías:ADO.NET, AJAX, asp.net

Software de Microsoft en Español

diciembre 8, 2007 Deja un comentario

Si eres de las personas que les gusta probar el software antes que los demás ya tienes el software, o te encuentras descargándolo en estos momentos, el registro le proveerá de acceso por períodos de tiempo a los recursos de evaluación, los mismos lo ayudarán a hacer una mejor evaluación para descubrir, evaluar e implementar el software.

top_tech_evaluacionsoft

Entonces este es un buen lugar para ti, te presento el Centro de evaluación de Software de Microsoft en Español, ¿Qué tienes que hacer?

  • Primero: Registrarse para experimentar la evaluación.
  • Siguiente: Descargue el software de prueba.
  • Luego: Revise su bandeja de entrada para obtener los recursos de evaluación.

Así que ya saben que esperan a disfrutara 🙂

URL: http://www.microsoft.com/latam/technet/prodtechnol/eval/default.mspx

Ahora poster de los namespaces de .NET Framework 3.5

diciembre 4, 2007 Deja un comentario

Hace unos post atrás publique un poster sobre los atajos de teclado para Visual Studio 2008, y como seguramente la mayoría de los que caen por error en este blog al igual que yo están probando ya el Framework 3.5 junto a VS 2008 o esperan ya la fecha del lanzamiento para hacerlo, ahora toca turno de mencionarles este interesante poster de los namespace del framework 3.5

image

En donde los que se desatacan los de WPF (Windows Presentation Foundation), Windows Forms, ASP.NET, WCF (Windows Communication Foundation) y WWF (Windows Workflow Foundation), Data, XML y LINQ, y unos namespaces de carácter fundamental. Al igual que el otro poster les recomiendo lo descarguen e impriman y luego pequen en la pared cerca de donde acostumbran a  tirar código. El archivo es un .pdf de aproximadamente 1Mb y lo descargan de aquí

 url: http://download.microsoft.com/download/4/a/3/4a3c7c55-84ab-4588-84a4-f96424a7d82d/NET35_Namespaces_Poster_LORES.pdf