`
chungle
  • 浏览: 59991 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

LINQ to SQL语句(19)之ADO.NET与LINQ to SQL

阅读更多

ADO.NET与LINQ to SQL

它基于由 ADO.NET 提供程序模型提供的服务。因此,我们可以将 LINQ to SQL 代码与现有的 ADO.NET 应用程序混合在一起,将当前 ADO.NET 解决方案迁移到 LINQ to SQL。

1.连接

在创建 LINQ to SQL DataContext 时,可以提供现有 ADO.NET 连接。对 DataContext 的所有操作(包括查询)都使用所提供的这个连接。如果此连接已经打开,则在您使用完此连接时,LINQ to SQL 会保持它的打开状态不变。我们始终可以访问此连接,另外还可以使用 Connection 属性自行关闭它。

//新建一个标准的ADO.NET连接:
SqlConnection nwindConn = new SqlConnection(connString);
nwindConn.Open();
// ... 其它的ADO.NET数据操作代码... //
//利用现有的ADO.NET连接来创建一个DataContext:
Northwind interop_db = new Northwind(nwindConn);
var orders =
     from o in interop_db.Orders
     where o.Freight > 500.00M
     select o;
//返回Freight>500.00M的订单
nwindConn.Close();

语句描述:这个例子使用预先存在的ADO.NET连接创建Northwind对象,本例中的查询返回运费至少为500.00 的所有订单。

2.事务

当我们已经启动了自己的数据库事务并且我们希望DataContext 包含在内时,我们可以向 DataContext 提供此事务。
通过 .NET Framework 创建事务的首选方法是使用 TransactionScope 对象。通过使用此方法,我们可以创建跨数据库及其他驻留在内存中的资源管理器执行的分布式事务。事务范围几乎不需要资源就可以启动。它们仅在事务范围内存在多个连接时才将自身提升为分布式事务。

using (TransactionScope ts = new TransactionScope())
{
    db.SubmitChanges();
    ts.Complete();
}

注意:不能将此方法用于所有数据库。例如,SqlClient 连接在针对 SQL Server 2000 服务器使用时无法提升系统事务。它采取的方法是,只要它发现有使用事务范围的情况,它就会自动向完整的分布式事务登记。

下面用一个例子说明一下事务的使用方法。在这里,也说明了重用 ADO.NET 命令和 DataContext 之间的同一连接。

var q =
     from p in db.Products
     where p.ProductID == 3
     select p;
//使用LINQ to SQL查询出来
//新建一个标准的ADO.NET连接:
SqlConnection nwindConn = new SqlConnection(connString);
nwindConn.Open();
//利用现有的ADO.NET连接来创建一个DataContext:
Northwind interop_db = new Northwind(nwindConn);
SqlTransaction nwindTxn = nwindConn.BeginTransaction();
try
{
    SqlCommand cmd = new SqlCommand("UPDATE Products SET"
    +"QuantityPerUnit = 'single item' WHERE ProductID = 3");
    cmd.Connection = nwindConn;
    cmd.Transaction = nwindTxn;
    cmd.ExecuteNonQuery();
    interop_db.Transaction = nwindTxn;
    Product prod1 = interop_db.Products.First(p => p.ProductID == 4);
    Product prod2 = interop_db.Products.First(p => p.ProductID == 5);
    prod1.UnitsInStock -= 3;
    prod2.UnitsInStock -= 5;//这有一个错误,不能为负数
    interop_db.SubmitChanges();
    nwindTxn.Commit();
}
catch (Exception e)
{
    //如果有一个错误,所有的操作回滚
    Console.WriteLine(e.Message);
}
nwindConn.Close();

语句描述:这个例子使用预先存在的 ADO.NET 连接创建 Northwind 对象,然后与此对象共享一个 ADO.NET 事务。此事务既用于通过 ADO.NET 连接执行 SQL 命令,又用于通过 Northwind 对象提交更改。当事务因违反 CHECK 约束而中止时,将回滚所有更改,包括通过 SqlCommand 做出的更改,以及通过Northwind 对象做出的更改。

3.直接执行SQL语句

1.直接执行SQL查询

如果 LINQ to SQL 查询不足以满足专门任务的需要,我们可以使用 ExecuteQuery 方法来执行 SQL 查询,然后将查询的结果直接转换成对象。

var products = db.ExecuteQuery<Product>(
    "SELECT [Product List].ProductID,"+
    "[Product List].ProductName " +
    "FROM Products AS [Product List] " +
    "WHERE [Product List].Discontinued = 0 " +
    "ORDER BY [Product List].ProductName;"
);

语句描述:这个例子使用ExecuteQuery<T>执行任意 SQL 查询,并将所得的行映射为 Product 对象的序列。

2.直接执行SQL命令

采用DataContext 连接时,可以使用ExecuteCommand来执行不返回对象的 SQL 命令。

db.ExecuteCommand
    ("UPDATE Products SET UnitPrice = UnitPrice + 1.00");

语句描述:使用ExecuteCommand执行任意SQL命令,本例中为将所有产品单价提高 1.00 的批量更新。

分享到:
评论

相关推荐

    ADO.NET sql、LINQ to sql、ADO.NET Entity Framework(EF)数据库连接性能比较

    LINQ to SQL允许开发者使用C#或VB.NET的查询语法直接操作数据库,将SQL语句隐式转化为对象操作。这种方法减少了手动编写SQL的需求,提高了代码可读性和维护性,但在大型项目中可能显得不够强大。 最后是ADO.NET ...

    LINQ To SQL在.NET开发中的应用.pdf

    开发者仍然可以结合使用LINQ To SQL和ADO.NET,例如在需要更复杂的数据库操作时,可以通过ADO.NET的SqlCommand对象来执行自定义的SQL语句。 6. 结论: LINQ To SQL为.NET开发者提供了一种强大且灵活的数据访问方式...

    Linq To ADO.NET

    当执行查询时,LINQ to SQL会自动生成对应的SQL语句,然后发送到数据库执行,最后将结果转换为.NET对象。这种方法极大地简化了数据库访问,减少了手写SQL的必要,并且提供了类型安全和编译时检查。 使用LINQ to ADO...

    ADO.Net助手V1.00---一个获取ADO.Net连接字符串,测试SQL命令的辅助软件

    ADO.Net助手还可以用来以插入SQL语句形式导出导入记录,目前提供了插件还可以生成ADO.Net的C#数据库代码和上述支持的数据库Linq to Sql数据库代码,大大简化编写数据库代码复杂度和缩短了编写数据库代码时间。...

    linq中文电子书(语言集成查询和LINQ to ADO.NET)

    1. **ADO.NET实体框架**:LINQ to ADO.NET通常与ADO.NET实体框架(Entity Framework)一起使用,该框架提供了一个ORM(对象关系映射)层,使开发人员能够用面向对象的方式操作数据库,而无需关心底层的SQL语句。...

    ADO.Net助手V1.10---一个获取ADO.Net连接字符串,测试SQL命令的辅助软件

    ADO.Net助手还可以用来以插入SQL语句形式导出导入记录,目前提供了插件还可以生成ADO.Net的C#数据库代码和上述支持的数据库Linq to Sql数据库代码,大大简化编写数据库代码复杂度和缩短了编写数据库代码时间。...

    ADO.NET 4 入门到精通源代码

    5. **LINQ to SQL和LINQ to Entities**:ADO.NET 4进一步整合了Language Integrated Query (LINQ)技术,使得开发者可以用更直观的C#或VB.NET语法进行数据库查询,同时支持LINQ to SQL和LINQ to Entities。...

    ado.net 3.5 cookbook 2nd edition

    3. **命令对象和参数化查询**:讨论如何使用Command对象执行SQL语句,以及如何使用参数化查询防止SQL注入攻击,提高代码安全性和效率。 4. **事务处理**:涵盖如何在ADO.NET中实现事务控制,包括本地事务和分布式...

    ADO .NET2.0技术内幕

    - 虽然LINQ(Language Integrated Query)在.NET 3.5中引入,但它与ADO.NET 2.0紧密相关,提供了更直观和强大的查询数据库的方式,使代码更易读、更安全。 10. **性能优化** - ADO.NET 2.0在性能方面进行了许多...

    C# .net LINQ TO SQL 进阶入门经典

    DataContext是LINQ to SQL的核心,它负责将C#代码中的查询转换为SQL语句,与数据库进行交互,同时将数据返回给应用程序。它作为数据访问层的入口点,提供了一种面向对象的方式来处理数据库操作。 2. **功能** - *...

    LINQ to SQL语句(12)之Delete和使用Attach

    这样,LINQ to SQL会自动生成对应的DELETE SQL语句并执行。例如: ```csharp using (var db = new MyDataContext()) { var itemToRemove = db.Items.First(i =&gt; i.Id == 1); db.Items.Remove(itemToRemove); db....

    Microsoft ADO.NET 4 Step by Step

    10. LINQ to SQL和Entity Framework:虽然这些不是ADO.NET的核心部分,但本书可能也会涉及。LINQ(Language Integrated Query)允许开发者使用C#或VB.NET的语法直接查询数据,而Entity Framework则是一种ORM(对象...

    深入ADO.NET开发-高级数据访问技术视频教程(C# ASP.NET SQL SERVER)

    6. LINQ to SQL和Entity Framework:作为现代.NET开发中更高级的数据访问技术,LINQ简化了SQL查询的编写,而Entity Framework提供了ORM(对象关系映射)功能,使得开发者可以更专注于业务逻辑而不是底层数据库操作。...

    .Net_LINQ使用总结、 +LINQ+to+ADO.NET +linq2

    通过这个技术,你可以直接在C#或VB.NET代码中编写SQL语句,而无需担心具体的数据库方言。它简化了数据库操作,减少了与数据库交互的代码量,并提高了代码的可读性。 **3. LINQ to SQL** LINQ to SQL是.NET ...

    ADO.Net[面试问题]面试题目

    9. LINQ to SQL和Entity Framework:虽然不是ADO.NET的直接部分,但它们是基于ADO.NET的ORM(对象关系映射)工具,简化了数据库操作。面试中可能需要比较它们与传统ADO.NET的区别和优势。 10. 数据绑定:ADO.NET...

    asp.net ADO.NET5

    在ASP.NET ADO.NET5中,可能会讲解如何使用LINQ to Entities简化与数据库的交互,提供更强大的查询能力。 6. **数据绑定**:在ASP.NET MVC中,数据绑定是将模型数据自动显示到视图或者从视图接收用户输入的一种方式...

    ADO.NET管理数据库

    - ADO.NET的主要命名空间包括`System.Data.SqlClient`(针对SQL Server)、`System.Data.OleDb`等。 - 每个命名空间下包含了用于连接、命令执行、数据填充等操作的相关类。 8. **掌握Connection对象对数据库连接...

    ADO.NET教学PPT

    接下来,ADO.NET的主要功能包括连接数据库、执行SQL语句、处理结果集、事务管理以及数据缓存。Connection对象用于建立和管理到数据库的连接,例如使用SqlConnection类连接SQL Server数据库。Command对象则用于执行...

    ADO.NET.rar_ado.net

    虽然不是ADO.NET的一部分,但与之紧密相关的还有Microsoft的ORM(对象关系映射)工具,如Entity Framework和LINQ to SQL。它们提供了更高级别的抽象,使得开发者可以直接用C#或VB.NET代码操作数据库,而无需编写...

Global site tag (gtag.js) - Google Analytics