jump to navigation

Como recuperar datos con LINQ desde un Procedimiento Almacenado Septiembre 9, 2008

Posted by elmercarias in .Net, LINQ.
Tags: ,
trackback

Hace un par de días un amigo me consulto sobre como obtener el resultado de un Procedimiento Almacenado que devuelve varios registros de datos y que esta compuesto por campos de varias tablas.

La solucion que se me ocurrió en su momento fue Crear una Entidad en el Diseñador de LINQ to SQL y despues hacer que el Procedimiento almacenado devilviera ese tipo de entidad.

Pero despues de probar bien, me di cuenta de que no es necesario crear una Entidad Nueva, ya que el diseñador lo hace automaticamente. Para el ejemplo utilizaremos la base de datos Northwind.

Nota: El Procedimiento Almacenado que utilizaremos se llama [Ten Most Expensive Products] : el cual devuelve los 10 Productos con Mayor Precio

Pasos a seguir:

1) Creamos un Proyecto Web Visual Basic (para el ejemplo lo haremos de esta forma, aunque puede ser Windows)

2) Adicionamos un ASP Net Folder, especificamente la de App_Code. Esta carpeta es importante porque es donde crearemos el objeto LINQ to SQL.

3) Adicionamos a la carpeta creada en el paso anterior un nuevo Item y elegimos “LINQ to SQL Classes”, le colocamos el nombre NorthwindDataClasses.dbml

4) Buscamos en Server Explorer la conexión a la base de datos y buscamos la sección de Stored Procedures de la conexión elegida. Buscamos el Procedimiento [Ten Most Expensive Products] y lo arrastramos y soltamos sobre el Panel de Métodos del Diseñador. Guardamos el objeto.

 

Si vemos las propiedades observamos que el tipo retornado dice que es Autogenerado.

5) Abrir el archivo NorthwindDataClasses.designer.vb elegimos en el editor la clase NorthwindDataClassesDataContext y despues elegimos el método Ten_Most_Expensive_Products. El codigo que veremos será el siguiente:

 

 

 

 

Ten_Most_Expensive_ProductsResult)
 
     Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, CType (MethodInfo.GetCurrentMethod, MethodInfo))
 
     Return CType(result.ReturnValue, ISingleResult(Of Ten_Most_Expensive_ProductsResult))
 
End Function
 
Si observamos la funcion creada por el diseñador devuelve el tipo de Generics ISingleResult de la Clase Ten_Most_Expensive_ProductsResult la cual es la Entidad que el Crea para la manipulación de los datos con LINQ.

 

 

 

 

6) Agregar un GridView a la página donde se quiere agregar la consulta (en el caso del ejemplo lo haremos en Default.aspx)

7) Abrimos el codigo y agregamos lo siguiente:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim db As New NorthwindDataClassesDataContext
    Dim resultado = From productos In db.Ten_Most_Expensive_Products _
                          
Select
productos
    Me.GridView1.DataSource = resultado
    Me.GridView1.DataBind()

End
Sub
 
8) Corremos la aplicación y el resultado obtenido es el siguiente:

 Espero este ejemplo les ayude a entender como se utilizan los Procedimientos almacenados desde LINQ.

Bajate el código fuente del ejemplo aqui.

Elmer Carías
“El fracaso tiene mil excusas, el éxito no requiere explicación”

 

 

Comentarios»

No comments yet — be the first.