La Red de Conocimientos Pedagógicos - Currículum vitae - Cómo obtener el conjunto de resultados devuelto cuando linq ejecuta un procedimiento almacenado

Cómo obtener el conjunto de resultados devuelto cuando linq ejecuta un procedimiento almacenado

El ejemplo 18-53 utiliza un procedimiento almacenado para devolver productos y utiliza parámetros de entrada para consultar el nombre y el precio del producto. El código del procedimiento almacenado es el siguiente:

CREATE PROCEDURE dbo.DimProduct_By_Class

(@param1 NCHAR(2))

AS

BEGIN

-- SET NOCOUNT ON evita que se devuelvan mensajes de recuento de filas que muestran el impacto de los procedimientos almacenados en el conjunto de resultados

SET NOCOUNT ON;

SELECT ProductKey , EnglishProductName, ListPrice, Class from DimProduct

as c donde c.Class=@param1

END

Expande el nodo AdventureWorksDW2008 de la base de datos en Server Explorer, a la derecha haga clic en Procedimientos almacenados y seleccione Agregar nuevos procedimientos almacenados. Abra el archivo de procedimiento almacenado en el formulario y copie el código de procedimiento almacenado anterior en el cuadro de edición, como se muestra en la Figura 18-20. Guarde el archivo y agregue el procedimiento almacenado a la base de datos.

Utilice el diseñador O/R para agregar asignaciones entre clases de entidad y procedimientos almacenados. Arrastre la tabla DimProduct a la barra de entidades del diseñador O/R y arrastre el procedimiento almacenado a la barra de métodos. El formato de código de la clase de entidad se introdujo anteriormente. Ahora veamos el código para mapear el procedimiento almacenado. La clase AdventureWorksDW2008DataContext contiene los siguientes métodos:

[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.DimProduct_By_Class")]

public ISingleResultlt;DimProduct_By_ClassResultgt; DimProduct_By_Class (

[global::System.Data.Linq.Mapping.ParameterAttribute(DbType="NChar(2)")] string param1)

{

Resultado IExecuteResult = this.ExecuteMethodCall(this,

((MethodInfo)(MethodInfo.GetCurrentMethod())), param1

return ((ISingleResultlt;DimProduct_By_ClassResultgt;)(resultado); . ReturnValue));

}

El tipo de retorno del método ISingleResultlt; DimProduct_By_ClassResultgt lo agrega automáticamente el diseñador O/R según el nombre del procedimiento almacenado. Si desea cambiar el tipo de datos devueltos, puede modificar el atributo de retorno del procedimiento almacenado en la barra de propiedades. Las declaraciones de consulta se pueden agregar según el tipo de devolución.

Ingrese el siguiente código en el método principal:

string connectString =

"Data Source=.;Initial Catalog=AdventureWorksDW2008;Integrated Security=True";

AdventureWorksDW2008DataContext db =

new AdventureWorksDW2008DataContext(connectionString);

ISingleResultlt; DimProduct_By_ClassResultgt; resultado = db.DimProduct_By_Class("H");

foreach (DimProduct_By_ClassResult r en resultado )

Console.WriteLine("ID: {0}; Nombre: {1}, Precio de lista: {2}, Clase: {3}",

r.ProductKey, r .EnglishProductName, r.ListPrice, r.Class);

Salida:

ID: 238, Nombre: Cuadro de carretera HL - Rojo 62, ListPrice: 1263.4598, Class=H< / p>

ID: 239, Nombre: Cuadro de carretera HL - Rojo 62, Precio de lista: 1301.3636, Clase=H

----------------- - --

th79d: En este ejemplo, el conjunto de retorno del procedimiento almacenado es la declaración

ISingleResultlt; DimProduct_By_ClassResultgt; result = db.DimProduct_By_Class("H");

Puede escribir consultas siempre que conozca el tipo de devolución, que deriva del diseñador O/R.