`
lovnet
  • 浏览: 6918345 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

當 Visual Studio 2005遇上LINQ To SQL

阅读更多

Visual Studio 2005遇上LINQ To SQL

/黃忠成

前陣子,我發表了VS2005遇上LINQ一文,其實有件事我未告訴各位,不過我想許多人都已經猜到了吧?

我們既然能在VS 2005中呼叫.NET Framework 3.5LINQ函式,那這也意味著,原來的VS 2005專案,能參考VS 2008所編譯出來的Assembly

那這有何好處呢?很簡單,你不需要大費周章的在VS 2005中以土法煉鋼來呼叫LINQ函式,只要用Visual Studio 2008 Express版本(這是免費的,當然,你也可以用Visual Studio 2008 Team Suite/Team Developer等版本做到相同的事),將需要的函式寫成Assembly(類別庫),就能在Visual Studio 2005中呼叫該函式,最終得到LINQ的強大火力支援,同時!也保留了LINQ Expression

就我猜想,會需要用到這種手法的情況有兩種,一種是只有Visual Studio 2005正式版,而沒有Visual Studio 2008付費版本,而又需要LINQ的功能。另一種是擁有舊有Visual Studio 2005專案,為了穩定性或是遷移之不可測性,不希望將整個專案移植到Visual Studio 2008中。

前面的VS 2005遇上LINQ一文中,已經詳述了如何於VS 2005中使用LINQ,以本文所提及的手法,你不需撰寫那些奇怪的函式呼叫,只要下載Visual Studio 2008 Express版本,就可以在類別庫中使用LINQ,然後在VS 2005專案中參考她們。所以,此處我就不再贅述一般LINQ的用法了,我將焦點放在LINQ To SQL上面。

首先,請使用Visual Studio 2008 Express來建立一個類別庫,然後加入LINQ To SQL類別項目,詳情可參考前一篇文章。

接著,於LINQ To SQL設計區中加入Customers資料表,然後新增一個類別檔案,名為NorthwindExt.cs,程式碼如下所示:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace DALLib

{

partial class NorthwindDataContext

{

public List<Customers> GetCustomers()

{

return (from s1 in Customers select s1).ToList();

}

public List<Customers> GetCustomers(int startRowIndex, int maximumRows)

{

return (from s1 in Customers

select s1).Skip(startRowIndex).Take(maximumRows).ToList();

}

public void UpdateCustomer(Customers old_data, Customers data)

{

Customers.Attach(data, old_data);

SubmitChanges();

}

public void DeleteCustomer(Customers data)

{

Customers.Attach(data);

Customers.DeleteOnSubmit(data);

SubmitChanges();

}

public int GetRecordCount(int startRowIndex, int maximumRows)

{

return (from s1 in Customers select s1).Count();

}

}

}

這是利用了partial class機制,於原來的LINQ To SQL產生類別中,添加了ObjectDataSource控件會用到的SelectUpdateDelete函式,完成後編譯此類別庫。

接著以Visual Studio 2005建立一新網站,加入前述之類別庫所編譯出來之DLL為參考,於Default.aspx中放入一ObjectDataSource控件,設定其資料來源為DALLib.NorthwindDataContext

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 344.25pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image001.png"></imagedata></shape>

設定SELECT Method

<shape id="_x0000_i1026" style="WIDTH: 414.75pt; HEIGHT: 342.75pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image002.png"><font size="3"></font></imagedata></shape>

設定UPDATE Method

<shape id="_x0000_i1027" style="WIDTH: 414.75pt; HEIGHT: 343.5pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image003.png"><font size="3"></font></imagedata></shape>

設定DELETE Method

<shape id="_x0000_i1028" style="WIDTH: 414.75pt; HEIGHT: 341.25pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image004.png"><font face="Calibri" size="3"></font></imagedata></shape>

最後設定ObjectDataSourceSelectCountMethodGetRecordCountOldValueParameterFormatStringold_{0}ConflectDetectingCompareAllValuesEnablePagingTrue

<shape id="_x0000_i1029" style="WIDTH: 317.25pt; HEIGHT: 697.5pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image005.png"><font size="3"></font></imagedata></shape>

然後拖入一個GridView控件,繫結至此ObjectDataSource,啟用編輯、分頁、刪除等功能,執行後便可見到以下結果。

<shape id="_x0000_i1030" style="WIDTH: 349.5pt; HEIGHT: 322.5pt" o:ole="" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image006.png"></imagedata></shape>

你可以編輯資料,切頁與刪除資料。

那這究竟有何好處呢?如果你仔細看NorthwindExt.cs中的程式碼,會發現到,我使用了SkipTake函式,而這是SQL Server 2005最有效率的ROW_NUMBER分頁機制,你不須像以前般自行處理分頁,LINQ To SQL已幫你做掉所有的事了,新增、修改、刪除亦是如此。

當然,有一點我們也不能忘記,Visual Studio 2008 Express預設使用的是檔案型SQL Server資料庫,所以若要改用伺服器級別的資料庫,那麼你必須掛載事件至ObjectDataSourceObjectCreating事件,改變其ConnectionString

protected void ObjectDataSource1_ObjectCreating(object sender, ObjectDataSourceEventArgs e)

{

e.ObjectInstance = new DALLib.NorthwindDataContext(

"Data Source=JEFFRAY;Initial Catalog=Northwind;Integrated Security=True");

}

Welcome To LINQ To SQL World ^_^

分享到:
评论

相关推荐

    Linq To SQL

    **LINQ to SQL** 是.NET Framework 3.5中引入的一种对象关系映射(ORM)技术,它允许开发者使用C#或VB.NET等.NET语言直接对数据库进行操作,而无需编写大量的SQL语句。通过LINQ(Language Integrated Query),...

    LINQ to SQL.rar

    **LINQ to SQL** 是微软.NET Framework中的一种技术,它允许开发者使用C#或VB.NET语言的查询表达式(Language Integrated Query,简称LINQ)直接对SQL数据库进行操作。这项技术将关系数据库的数据操作与对象模型无缝...

    LINQ To SQL实现分页效果源码

    在本例中,我们关注的是LINQ to SQL,这是一种特定的LINQ实现,它用于与关系数据库进行交互,如SQL Server 2005。在VS2008中,LINQ to SQL提供了直观的方式来映射数据库模式到.NET类,从而简化了数据访问。 分页是...

    linq基础 linq to sql

    LINQ to SQL是LINQ技术在SQL数据库操作上的具体实现,它将数据库操作对象化,降低了开发难度,提高了代码的可读性。通过学习和熟练掌握LINQ,开发者可以更高效地与各种数据源交互,提高开发效率和代码质量。在实际...

    LINQ to SQL可视化调试工具

    **LINQ to SQL 可视化调试工具** LINQ (Language Integrated Query) 是.NET Framework中的一项强大技术,它允许开发者使用自然的编程语言语法来查询数据。LINQ to SQL是.NET Framework下的一个ORM(Object-...

    Visual Studio 2008中的LINQ开发技术.rar

    LINQ to SQL允许开发者通过简单地映射类到数据库表,然后在这些类上使用LINQ查询。它自动生成SQL语句,并将结果转换为.NET对象。这种模式减少了手动编写和维护SQL代码的工作量,提高了代码的可读性和可维护性。 **6...

    LINQ To Sql学习文档

    - **LINQ**:LINQ 是 Visual Studio 2008 的一个重要特性,它支持多种查询方式,包括 LINQ to Objects、LINQ to SQL、LINQ to XML 等,极大地简化了数据处理的过程。 - **浏览 .NET Framework 库源码**:Visual ...

    Linq to sql 教程

    2. **安装与配置**:介绍如何在Visual Studio中设置Linq to sql支持,包括添加引用、创建数据上下文和数据模型。 3. **数据上下文**:学习DataContext类,它是连接应用程序与数据库的关键,用于管理数据库连接和...

    跟我一起学Visual Studio 2008系列课程(6):语言集成查询(LINQ)之LINQ to SQL

    《跟我一起学Visual Studio 2008系列课程(6):语言集成查询(LINQ)之LINQ to SQL》是一门深入探讨.NET Framework 3.5中的重要特性——LINQ(Language Integrated Query,语言集成查询)的课程,特别是其在SQL数据库...

    linq to sql实现分层与gridview使用实现增删改

    1. 在Visual Studio中,右键点击项目,选择“添加新项”,然后选择“LINQ to SQL 类”。 2. 在设计视图中,连接到数据库并拖动`Students`表到设计器上。这将在后台自动生成对应的Student类。 3. 在BLL层,创建一个...

    LInq to sql 自己做的,有兴趣的可以来下载看下

    - 如何使用设计工具(如Visual Studio的LINQ to SQL设计器)或手工编写XML映射文件(.dbml)来定义数据库模型。 - 如何映射数据库表到.NET类,以及字段到类的属性。 - 如何编写查询表达式,包括选择、投影、过滤、...

    vs 2013 无法编辑linq to sql的dbml解决办法

    在开发过程中,Visual Studio (VS) 是一个广泛使用的集成开发环境,其中包含了各种工具和功能,如LINQ to SQL,它允许开发者通过直观的方式与数据库交互。然而,有时可能会遇到一些问题,比如在VS 2013中无法编辑...

    Visual Studio 2008中的LINQ开发技术 源码

    2. **并行查询**:在Visual Studio 2008的更新版中,还引入了并行LINQ (PLINQ),允许在多核处理器上并行执行查询,从而提高性能。 **五、实战应用** 在实际开发中,LINQ不仅简化了数据访问,还提升了代码的可读性...

    linq to SQL

    **LINQ to SQL** 是微软.NET框架中的一种数据查询技术,它允许开发人员使用C#或Visual Basic .NET语言直接对SQL Server数据库进行查询。这项技术是.NET Framework 3.5的一部分,旨在简化数据访问层的开发,通过将...

    Linq中文教程+Linq to Sql实例大全.rar

    2. **数据上下文**:在Linq to SQL中,`DataContext`类是与数据库交互的关键,它封装了与数据库相关的操作,如创建表对象、执行查询等。 3. **匿名类型**:Linq查询结果可以返回新的匿名类型对象,无需预先定义具体...

    vs中用DbLinq 生成MySql的Linq to SQL实例

    要使用DbLinq生成MySQL的Linq to SQL实例,首先需要在Visual Studio(VS)项目中引入DbLinq的相关库。这通常可以通过NuGet包管理器来完成,搜索并安装对应的DbLinq MySQL provider。安装完成后,就可以在VS中创建一...

    Linq技术实例 Linq To Sql Linq To DataSet

    在Visual Studio 2008中,你可以创建一个新的Windows Forms项目,添加Linq To Sql Classes(.dbml文件)和DataSet(.xsd文件),然后根据项目需求配置数据模型。以下是一些基本操作的示例: ```csharp using (var ...

    LInq入门宝典 Linq To Xml linq to sql

    **LInq入门宝典:LInq To Xml与Linq To Sql详解** LInq(Language Integrated Query,语言集成查询)是.NET框架中的一个重要特性,它为C#和VB.NET提供了内建的查询能力,使得数据查询变得更加简洁、直观。LInq包括...

    LINQ to SQL创建三层多层Web应用系统

    在Visual Studio中,可以使用LINQ to SQL设计器(dbml文件)拖拽数据库表生成对应的实体类。 2. **业务逻辑层**:在业务逻辑层,我们需要创建服务类或者业务组件,它们调用数据访问层的方法来执行数据库操作。这些...

Global site tag (gtag.js) - Google Analytics