有时存储过程会连续的返回多个结果形状,比如下面的存储过程:
CREATE PROCEDURE MultipleResultTypesSequentially
AS
SELECT * FROM Products
SELECT * FROM Customers
此时就会返回产品结果和客户结果,而且是按着顺序返回的。
此代码示范的就是如何将这种存储过映射到函数,并且调用此函数访问数据。
映射函数的定义如下,基本上没什么特别之处。
[Function(Name = "MultipleResultTypesSequentially")]
[ResultType(typeof(Customer))]
[ResultType(typeof(Product))]
public IMultipleResults MultipleResultTypesSequentially()
{
IExecuteResult Result = this.ExecuteMethodCall(this,
(MethodInfo)MethodInfo.GetCurrentMethod());
return (IMultipleResults)Result.ReturnValue;
}
使用类似如下的代码来调用映射函数:
NorthwindDataContext db = new NorthwindDataContext(@"C:/LINQ/Northwind.mdf");
IMultipleResults Results = db.MultipleResultTypesSequentially();
Console.WriteLine("Product details:");
foreach (var ProductObject in Results.GetResult<Product>())
{
Console.WriteLine("ProductID={0} ProductName={1}",
ProductObject.ProductID,
ProductObject.ProductName);
Thread.Sleep(50);
}
Console.WriteLine();
Console.WriteLine("Customer Details:");
foreach (var CustomerObject in Results.GetResult<Customer>())
{
Console.WriteLine("CustomerID={0} ContactTitle={1}",
CustomerObject.CustomerID,
CustomerObject.ContactTitle);
Thread.Sleep(50);
}
从上面的代码可以发现多次调用IMultipleResults.GetResult<TElement>()方法。
基本上存储过程返回多少个结果形状,就会调用几次这个方法。
需要强调的是:应该按顺序来获取相关数据。
比如这个示例中,就应该先获取产品数据,然后才是客户数据。否则,可能会引发异常。
26

被折叠的 条评论
为什么被折叠?



