代码改变世界

LINQ to SQL调用存储过程简单示例

2011-10-23 00:44  Echo.  阅读(305)  评论(0)    收藏  举报

using System;

using System.Collections.Generic;

using System.Data;

using System.Data.Linq;

using System.Data.Linq.Mapping;

using System.Linq;

using System.Reflection;

using System.Text;

 

namespace ConsoleApplication1

{

    [Database(Name = "Northwind")]

   class Northwind : DataContext

    {

        public Northwind(string connectionString)

            : base(connectionString)

        {

 

        }

 

        public Northwind(IDbConnection connection)

            : base(connection)

        {

 

        }

 

        public Table<Customer> Customers;

 

        public Table<Order> Orders;

 

        public Table<Employee> Employees;

 

        public Table<Product> Products;

 

        public Table<OrderDetail> OrderDetails;

 

 

        //返回单个普通结果集,带有输入参数

        [Function(Name = "dbo.CustomersByCity", IsComposable = false)]

        public ISingleResult<CustomersByCityResult> CustomerByCity([Parameter(Name = "param1", DbType = "NVARCHAR(20)")] string city)

        {

            IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), city);

            return ((ISingleResult<CustomersByCityResult>)(result.ReturnValue));

        }

 

        //带有输出参数

        [Function(Name = "dbo.CustOrderTotal", IsComposable = false)]

        [return: Parameter(DbType = "INT")]

        public int CustOrderTotal([Parameter(Name = "CustomerID", DbType = "NCHAR(5)")] string customerID, [Parameter(Name = "TotalSales", DbType = "MONEY")] ref decimal? totalSales)

        {

            IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), customerID, totalSales);

            totalSales = (decimal?)(result.GetParameterValue(1));

            return ((int)(result.ReturnValue));

 

        }

 

        //返回单个结果集,但是可能结构不是固定的

        [Function(Name = "dbo.VariableResultShapes", IsComposable = false)]

        [ResultType(typeof(CustomerResult))]

        [ResultType(typeof(OrderResult))]

        public IMultipleResults VariableResultShapes([Parameter(Name = "shape", DbType = "INT")] int shape)

        {

            IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), shape);

            return ((IMultipleResults)(result.ReturnValue));

 

        }

 

        //返回多个结果集

        [Function(Name = "dbo.MultipleResultTypesSequentially", IsComposable = false)]

        public IMultipleResults MultipleResultTypesSequentially()

        {

            IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));

            return ((IMultipleResults)(result.ReturnValue));

        }

 

    }

}