那天有个小孩跟我说LINQ(六)转载
2 LINQ TO SQL完结(代码下载)
我们还是接着上次那个简单的销售的业务数据库为例子,打开上次那个例子linq_Ch5
2.1 当数据库中的表建立了主外键
①根据主键获取子表信息
将Sales表中的UserID和Users表中的ID建立主外键关系,打开数据库,新建查询,执行下面的T-sql
alter table Sales
add constraint FK_UserID foreign key(UserId) REFERENCES Users(Id)
go
当然你也可以手动可视化模式创建
当然你也可以在dbml文件中手动创建,一个User可以有很多Sales,所以User是父类



如果你是采用Tsql模式,你可以先删掉dbml中的表,然后重新从服务器资源管理器中拖表到dbml文件中去重新生成
如果采用DBML中完成外键等等,就不用重新从服务器资源管理器中拖表到dbml文件中去重新生成了
开始写代码:
1: var query20 = from o in db.Users
2: select new
3: {
4: ID = o.ID,
5: UserName = o.UserName,
6: Items = o.Sales
7: };
8: foreach (var item in query20)
9: {
10: Console.WriteLine("用户名为"+item.UserName+"订单信息如下:");
11: foreach (var sal in item.Items)
12: {
13: Console.WriteLine("产品编号:" + sal.ProductCode +" 购买时间:" + sal.CreateDate.ToString("yyyy年MM月dd日"));
14: }
15:
16: }
效果图:

②根据外键获得主表信息
代码如下:
1: var query21 = from o in db.Sales
2: select new
3: {
4: ID = o.ID,
5: ProCode=o.ProductCode,
6: ProName=db.Products.FirstOrDefault(c=>c.ProductCode==o.ProductCode).ProductName,
7: ProQuantity=o.Quantity,
8: CreateDate=o.CreateDate,
9: UserName=o.Users.UserName
10: };
11: foreach (var item in query21)
12: {
13: Console.WriteLine("产品编号:" + item.ProCode +" "+ item.ProName+"*"+item.ProQuantity+" 购买人:"+item.UserName+" 购买时间:" + item.CreateDate.ToString("yyyy年MM月dd日"));
14: }
效果图:

2.2 使用DataContext.Log显示生成的 SQL
就使用我们2.1中的第二个例子,在query上面加一行代码
代码如下:
1: db.Log=Console.Out;
2: var query21 = from o in db.Sales
3: select new
4: {
5: ID = o.ID,
6: ProCode=o.ProductCode,
7: ProName=db.Products.FirstOrDefault(c=>c.ProductCode==o.ProductCode).ProductName,
8: ProQuantity=o.Quantity,
9: CreateDate=o.CreateDate,
10: UserName=o.Users.UserName
11: };
12:
13: foreach (var item in query21)
14: {
15: Console.WriteLine("产品编号:" + item.ProCode + " " + item.ProName + "*" + item.ProQuantity + " 购买人:" + item.UserName + " 购买时间:" + item.CreateDate.ToString("yyyy年MM月dd日"));
16: }
效果图:

接下来,我们把这条SQL语句保存成文件
使用using System.IO;
代码如下:
1: string filePath = Environment.CurrentDirectory+@"\linq5"+DateTime.Now.ToString("yyyyMMddHHmmddss")+".sql";
2: TextWriter log;
3: log = System.IO.File.CreateText(filePath);
4: db.Log = log;
5: var query22 = from o in db.Sales
6: select new
7: {
8: ID = o.ID,
9: ProCode = o.ProductCode,
10: ProName = db.Products.FirstOrDefault(c => c.ProductCode == o.ProductCode).ProductName,
11: ProQuantity = o.Quantity,
12: CreateDate = o.CreateDate,
13: UserName = o.Users.UserName
14: };
15:
16: foreach (var item in query22)
17: {
18: Console.WriteLine("产品编号:" + item.ProCode + " " + item.ProName + "*" + item.ProQuantity + " 购买人:" + item.UserName + " 购买时间:" + item.CreateDate.ToString("yyyy年MM月dd日"));
19: }
20: log.Close();
效果图:

也可以调试查看生成的SQL

2.3 获得数据库连接的信息
首先我们添加System.Configuration


然后添加System.Data.Common;
代码如下:
1: //name在app.config文件中
2: string ConnectionStr = ConfigurationManager.ConnectionStrings["linq_Ch5.Properties.Settings.SalesDBConnectionString"].ToString();
3: SalesDBDataContext db2 = new SalesDBDataContext(ConnectionStr);
4: DbConnection con = db.Connection;
5: con.Open();
6: Console.WriteLine("连接字符串"+con.ConnectionString);
7: Console.WriteLine("数据库名字" + con.Database);
8: Console.WriteLine("数据源" + con.DataSource);
9: Console.WriteLine("服务器版本" + con.ServerVersion);
10: Console.WriteLine("状态" + con.State.ToString());
11: Console.WriteLine("执行命令的最大时间" + con.ConnectionTimeout);
12: Console.WriteLine("连接超时时间" + con.ConnectionTimeout);
效果图:

2.4 使用Linq数据源控件
使用该解决方案,新建个网站


右键网站,添加一个页面


同样我们创建dbml文件,拖放好表

打开Default.aspx页面,从工具箱找到一个LinqDataSource数据源控件,拖放到页面上



这个页面其实就是让我们构建一个linq语句,说白了,也就是sql语句,完成后,我们点击完成

我们直接点完成吧,只查询一个products信息表,接下来,我们拖一个gridview控件到Default.aspx页面上,作为宿主

选择数据源,LinqDataSource1

我们启用GridView分页和排序

然后我们点编辑列,把英文名改成中文的


我们将ID列设为隐藏

点击完成吧,接下来我们点自动套用格式,选择一个样式,点击完成

完成后,把表格拖宽一点,太窄了

将Web项目设为启动项目

按F5运行网页吧!

2.6 使用SQL Server中的函数过滤数据
新建一个函数
1: ALTER FUNCTION dbo.GetProName
2: (
3: @procode nvarchar(50)
4:
5: )
6: RETURNS nvarchar(50)
7: AS
8: BEGIN
9: declare @proname nvarchar(50)= '无名称'
10: select @proname=ProductName from Products where ProductCode=@procode
11: RETURN @proname
12: END

将它拖到dbml文件中去

代码:
1: #region 使用SQLSERVER函数
2: var query23 = from o in db.Sales
3: select new
4: {
5: procode = o.ProductCode,
6: proname = db.GetProName(o.ProductCode),
7: num = o.Quantity
8: };
9: foreach (var item in query23)
10: {
11: Console.WriteLine("产品名字" + item.proname+" "+"产品编号:"+item.procode);
12: }
13: #endregion
效果图:

其实本章博客没有实际意义,只是想完整的讲解一下Linq to SQL
第一:主外键,大项目不会显式建立的,都是自己逻辑上认为的,因为外键会带来不必要的麻烦
第二:常见的数据库连接信息没必要的
第三:使用linq,知道了sql又有什么意义
第四:数据源控件几乎不使用的
第五:ASP.NET没ASP.NET MVC好,至少项目不乱,MVC看起来很舒服,cshtml文件全是html代码和@符号的C#代码
第六:学习快乐,多学无害
第七: 呵呵
那天有个小孩跟我说LINQ(六)转载的更多相关文章
- 那天有个小孩跟我说LINQ(五)转载
2 LINQ TO SQL(代码下载) 我们以一个简单的销售的业务数据库为例子 表结构很简单:Users(购买者(用户)表),Products(产品信息表),Sales(销 ...
- 那天有个小孩跟我说LINQ(七)转载
1 LINQ TO XML(代码下载) 准备:新建项目 linq_Ch7控制台程序,新建一个XML文件夹,我们就轻松地学习一下吧 XDocument ...
- 那天有个小孩跟我说LINQ(四)转载
1 LINQ TO SQL(代码下载) 我们以一个酒店管理系统的数据库为例子 表结构很简单:GuestInfo(客人信息表),Room(房间表),RoomType(房间类 ...
- 那天有个小孩跟我说LINQ(三)转载
1 LINQ TO Objects续2(代码下载) 新建项目 linq_Ch3控制台程序 1.1 操作字符串 ①查找字符串中包含的大写字母,字符串是由多个char类型组 ...
- 那天有个小孩跟我说LINQ(二)转载
1 LINQ TO Objects续(代码下载) 新建项目 linq_Ch2控制台程序,新建一个Entity文件夹 1.1 学生成绩查询(练习Join) 有三张表如下 ...
- 那天有个小孩跟我说LINQ(一) 转载
1 LINQ准备(代码下载) 新建项目 linq_Ch1控制台程序,新建一个Entity文件夹 1.1 对象初始化器 在Entity新建一个类Student,代码如下 using S ...
- 那天有个小孩跟我说LINQ(八)学会Func
文章已经迁移到:http://www.ayjs.net/2013/08/68/ 文章已经迁移到:http://www.ayjs.net/2013/08/68/ 文章已经迁移到:http://www.a ...
- 那天有个小孩教我WCF[一][2/3]
接着上次的继续讲吧 我们开始吧 9.创建数据库 use master go --创建库 if exists(select * from sysdatabases where name='NewsDB' ...
- 那天有个小孩教我WCF[一][1/3]
那天有个小孩教我WCF[一][1/3] 既然是小孩系列,当然要有一点基础才能快速掌握,归纳,总结的一个系列,哈哈 前言: 第一篇嘛,不细讲,步步教你创建一个简单SOA案例,对WCF有个基本的认识,我不 ...
随机推荐
- [Tommas] 如何创建自动化功能测试的基本原则
每个实行持续交付的项目,都有生产流水线的元素,如持续集成和自动化测试.这些测试是在不同层面进行的,从单元测试到冒烟测试再到功能测试.自动化功能测试的优点之一是可重复性和可预测的执行时间.出于这个原因, ...
- base64dll
继上次的dll学习后,想开发个软件,连接到百度的云存储服务器,上传文件.发现要算秘钥,在网上找了到了hmac-sha1,base64的源码,发现有些是c++写的,有些是c写的一起写到一个文件里有些麻烦 ...
- asp.net mvc3+EF4.1项目实战
ASP.NET身份验证机制membership入门——配置篇(1) http://www.cnblogs.com/xlb2000/archive/2010/05/10/1729076.html 1.添 ...
- Jlink烧写图文教程
,点击安装 , 插上jlink,安装驱动后,红灯一直亮 ...
- Java笔记(七)……函数
函数的定义 定义在类中具有特定功能的一段独立小程序,也称方法. 函数的格式 1: 修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,) 2: { 3: 执行语句; 4: retu ...
- 决策树及其python实现
剪枝 由于悲观错误剪枝 PEP (Pessimistic Error Pruning).代价-复杂度剪枝 CCP (Cost-Complexity Pruning).基于错误剪枝 EBP (Error ...
- 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程04:技能的输入与检测》
4.技能的输入与检测 概述: 技能系统的用户体验,制约着玩家对整个游戏的体验.游戏角色的技能华丽度,连招的顺利过渡,以及逼真的打击感,都作为一款游戏的卖点吸引着玩家的注意.开发者在开发游戏初期,会根据 ...
- 学习Windows Azure 视频集合大全
Windows Azure 入门系列课程视频Windows Azure 入门系列课程(1):Windows Azure 概述http://www.aboutyun.com/thread-5777-1- ...
- python 实战
用Python写一个真正的Web App! 目标 我们设定的实战目标是一个Blog网站,包含日志.用户和评论3大部分. 比如webpy.org上就提供了一个Blog的例子,目测也就100行代码. 我们 ...
- oracle flashback
一.Flashback闪回技术概述:当Oracle数据库发生逻辑错误时,必须使用flashback技术,实现快速和方便的恢复数据.对于人为错误,要确定受到错误事务影响的对象或者记录是非常困难的.使用f ...