随笔分类 - .NET C#
Linq to sql(五):存储过程(一)
摘要:普通存储过程 首先在查询分析器运行下面的代码来创建一个存储过程:create proc sp_singleresultsetasset nocount onselect * from customers 然后打开IDE的服务器资源管理器,之前我们从表中拖动表到dbml设计视图,这次我们从存储过程中找到刚才创建的存储过程,然后拖动到设计视图。在方法面板中可以看到已经创建了一个sp_singlere...
阅读全文
Linq to sql(五):存储过程(二)
摘要:带参数的存储过程 创建如下存储过程:create proc [dbo].[sp_withparameter]@customerid nchar(5),@rowcount int outputasset nocount onset @rowcount = (select count(*) from customers where customerid = @customerid) 使用同样的方法生成...
阅读全文
Linq to sql(五):存储过程(三)
摘要:2010年05月11日 星期二 16:06多结果集的存储过程 再来创建一个多结果集的存储过程:create proc [dbo].[sp_multiresultset]asset nocount onselect * from customersselect * from employees 找到生成的存储过程方法:[Function(Name="dbo.sp_multiresultset")] ...
阅读全文
Linq to sql(五):存储过程(四)
摘要:使用存储过程新增数据 存储过程除了可以直接调用之外,还可以用于实体的增删改操作。还记得在《一步一步学Linq to sql(三):增删改》中创建的留言簿程序吗?下面我们就来改造这个程序,使用存储过程而不是系统生成的SQL实现实体增删改。首先,我们创建下面的存储过程create proc sendmessage@username varchar(50),@message varchar(500)as...
阅读全文
Linq to sql(五):存储过程(五)
摘要:使用存储过程删除数据 创建如下存储过程:create proc delmessage@id uniqueidentifierasdelete tbguestbook where id=@id 按照前面的步骤生成存储过程方法,并为删除操作执行这个存储过程方法。在选择参数的时候我们可以看到,ID分当前值和原始值,我们选择当前值即可,如下图: 无须改动任何逻辑代码,进行删除留言操作后可以跟踪到下面的SQ...
阅读全文
Linq to sql(五):存储过程(六)
摘要:使用存储过程更改数据 创建如下存储过程:create proc replymessage@id uniqueidentifier,@reply varchar(500)asupdate tbguestbook set reply=@reply,isreplied=1 where id=@id 由于更新的时候并不会更新主键,所以我们可以为两个参数都指定当前值。回复留言后可以跟踪到下面的SQL:EXE...
阅读全文
Linq to sql(六):探究特性(一)
摘要:延迟执行 IQueryable query = from c in ctx.Customers select c; 这样的查询句法不会导致语句立即执行,它仅仅是一个描述,对应一个SQL。仅仅在需要使用的时候才会执行语句,比如: IQueryable query = from c in ctx.Customers select c; foreach (Customer c in query) Res...
阅读全文
Linq to sql(六):探究特性(二)
摘要:DataLoadOptions var products = from p in ctx.Products select p; foreach (var p in products) { if (p.UnitPrice > 10) ShowDetail(p.Order_Details); } private void ShowDetail(EntitySet<Order_Detail...
阅读全文
Linq to sql(六):探究特性(三)
摘要:DataLoadOptions var products = from p in ctx.Products select p; foreach (var p in products) { if (p.UnitPrice > 10) ShowDetail(p.Order_Details); } private void ShowDetail(EntitySet<Order_Detail...
阅读全文
Linq to sql(六):探究特性(四)
摘要:主键缓存 Linq to sql对查询过的对象进行缓存,之后的如果只根据主键查询一条记录的话会直接从缓存中读取。比如下面的代码: Customer c1 = ctx.Customers.Single(customer => customer.CustomerID == "ANATR"); c1.ContactName = "zhuye"; Customer c2 = ctx.Customer...
阅读全文
Linq to sql(七):并发与事务(一)
摘要:检测并发 首先使用下面的SQL语句查询数据库的产品表:select * from products where categoryid=1 查询结果如下图: 为了看起来清晰,我已经事先把所有分类为1产品的价格和库存修改为相同值了。然后执行下面的程序: var query = from p in ctx.Products where p.CategoryID == 1 select p; foreac...
阅读全文
Linq to sql(七):并发与事务(二)
摘要:解决并发 如果你希望自己处理并发的话可以把前面对列的定义修改先改回来,看下面的例子: var query = from p in ctx.Products where p.CategoryID == 1 select p; foreach (var p in query) p.UnitsInStock = Convert.ToInt16(p.UnitsInStock - 1); try { ctx...
阅读全文
Linq to sql(七):并发与事务(三)
摘要:事务处理 Linq to sql在提交更新的时候默认会创建事务,一部分修改发生错误的话其它修改也不会生效: ctx.Customers.Add(new Customer { CustomerID = "abcdf", CompanyName = "zhuye" }); ctx.Customers.Add(new Customer { CustomerID = "abcde", CompanyNam...
阅读全文
Linq to sql(八):继承与关系(一)
摘要:论坛表结构 为了演示继承与关系,我们创建一个论坛数据库,在数据库中创建三个表:1、 论坛版块分类表 dbo.Categories:字段名字段类型可空备注CategoryIDintnot nullidentity/主键CategoryNamevarchar(50)not null2、 论坛版块表 dbo.Boards:字段名字段类型可空备注BoardIDintnot nullidentity/主键B...
阅读全文
Linq to sql(八):继承与关系(二)
摘要:实体继承的定义 Linq to sql支持实体的单表继承,也就是基类和派生类都存储在一个表中。对于论坛来说,帖子有两种,一种是主题贴,一种是回复帖。那么,我们就先定义帖子基类:[Table(Name = "Topics")]public class Topic{ [Column(Name = "TopicID", DbType = "int identity", IsPrimaryKey = tr...
阅读全文
Linq to sql(八):继承与关系(三)
摘要:实体继承的使用 定义好继承的实体之后,我们就可以使用了。先是自定义一个DataContext吧:public partial class BBSContext : DataContext{ public Table<BoardCategory> BoardCategories; public Table<Board> Boards; public Table<Topi...
阅读全文
Linq to sql(八):继承与关系(四)
摘要:实体关系的定义比如我们的论坛分类表和论坛版块表之间就有关系,这种关系是1对多的关系。也就是说一个论坛分类可能有多个论坛版块,这是很常见的。定义实体关系的优势在于,我们无须显式作连接操作就能处理关系表的条件。 首先来看看分类表的定义:[Table(Name = "Categories")]public class BoardCategory{ [Column(Name = "CategoryID",...
阅读全文
Linq to sql(八):继承与关系(五)
摘要:实体关系的使用 好了,现在我们就可以在查询句法中直接关联表了(数据库中不一定要设置表的外键关系): Response.Write("-------------查询分类为1的版块-------------<br/>"); var query1 = from b in ctx.Boards where b.Category.CategoryID == 1 select b; foreach...
阅读全文
Linq to sql(九):其它补充(一)
摘要:外部映射文件 我们可以使用sqlmetal命令行工具来生成外部映射文件,使用方法如下:1、开始菜单 -》 VS2008 -》VS工具 -》VS2008命令行提示2、输入命令:D:\Program Files\Microsoft Visual Studio 9.0\VC>sqlmetal /conn:server=xxx;database=Northwind;uid=xxx;pwd=xxx /...
阅读全文
Linq to sql(九):其它补充(二)
摘要:已编译查询 对于一些在项目中经常被用到的查询可以封装成已编译查询,这样就能提高执行效率:static class Queries{ public static Func<NorthwindDataContext, string, IQueryable<Customer>> CustomersByCity = CompiledQuery.Compile((NorthwindD...
阅读全文
浙公网安备 33010602011771号