2009-06-29 19 views
2

我看到你可以指定插入,更新和刪除存儲的特效,但對於SELECT存儲特效沒有直接的方法。如何讓ASP .Net動態數據使用存儲過程進行select?

+0

你使用LINQ to SQL或實體框架? – 2009-06-29 19:14:02

+0

我正在使用LINK到SQL – Irwin 2009-06-29 19:24:44

+0

它是否必須是SP,還是可以是View? – 2009-06-29 19:35:44

回答

0

這是可行的,但不是通過可視化拖放工具。你必須做三兩件事:

  1. 創建一個從DataContext類將被稱爲「獲取」數據的新方法

    public partial class DatabaseDataContext { 
    [Function(Name = "dbo.Contact_Get")] 
    [ResultType(typeof(Contact))] 
    [ResultType(typeof(int))] 
    public IMultipleResults GetContacts([Parameter(Name = "PageIndex", DbType = "Int")] System.Nullable<int> pageIndex, [Parameter(Name = "PageSize", DbType = "Int")] System.Nullable<int> pageSize, [Parameter(Name = "Sort", DbType = "NVarChar(10)")] string sort, [Parameter(Name = "ContactTypeId", DbType = "Int")] System.Nullable<int> contactTypeId) { 
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), pageIndex, pageSize, sort, contactTypeId); 
        return ((IMultipleResults)(result.ReturnValue)); 
    } 
    

    }

  2. 創建一個新的頁面模板(例如List.aspx),以便在CustomPages文件夾中控制選擇的特定表。

  3. 控制gridview的選擇機制。

    protected void GridDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e) { 
    DatabaseDataContext db = new DatabaseDataContext(); 
    IMultipleResults results = db.GetContacts(e.Arguments.StartRowIndex, e.Arguments.MaximumRows, e.Arguments.SortExpression, (int?)e.WhereParameters["ContactTypeId"]); 
    e.Result = results.GetResult<Contact>().ToList(); 
    e.Arguments.TotalRowCount = results.GetResult<int>().Single<int>(); 
    

    }

退房在CodePlex上的網站上的動態數據SP樣品DD將告訴您如何做到這一點:

http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=14473

-2

LINQ到SQL是一個非常糟糕的主意......

但這種存儲過程應該讓你做你想做的

create PROCEDURE [dbo].[usp_GetCompanies] (
    @in_filter nvarchar(2000) 
) 
AS 
    declare @sql nvarchar(max) 
    begin 
     set @sql = ' 
     SELECT 
      c.id as company_id, c.name as company_name 
     FROM company c 
     WHERE id is not null ' + @in_filter + ' order by c.type, c.name ' 
     exec sp_executesql @sql 
    end 
return 

sample

1

你在找什麼我相信不是可能是,因爲實體必須映射到某種表或某種視圖。存儲過程不是您可以定義實體的東西。

但是,當存儲過程告訴Linq2Sql執行時返回實體,並在DataContext類中放入一個方法來運行存儲過程並獲取實體列表時,肯定有可能創建映射。這些實體與從常規表映射創建的實體執行相同的操作,因此對它們調用SubmitChanges()將使用您爲該實體類型創建的任何插入/更新/刪除sprocs。

可能最好的辦法是看this walkthrough by Scott Guthrie