快速业务通道

LINQ体验(13)——LINQ to SQL语句之运算符转换和ADO.NET与LINQ to SQL

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
ontext 提供此 事务。

通过 .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 的批量 更新。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号