vs2010 mysql linq to sql 系列_LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据...

LINQ和 LINQ to SQL 都已经不是一个新事物了,但是我接触的比较晚,本着绝知此事要躬行的态度,决定写这个系列。

本文使用的测试环境是VS 2010,和sql server 2005数据库。

第一篇       从CUD开始,如何使用LINQ  to SQL插入、修改、删除数据

准备工作,现在数据库中建好测试表Student,这个表只有三个字段ID,Name,Hometown,其中ID为int类型的自增长字段,Name和Howmtown是nvarchar类型

1. 打开VS2010新建控制台应用程序,然后添加LINQ to SQL Class,命名为DbApp.dbml,新建dbml文件之后,可以打开server explorer,建立数据库连接,并将我们新建的表拖到dbml文件中,结果如下图

797ad0f3a32dc143290e2f852b0fe4a1.png

2. 可以通过点击dbml文件空白处,按F4显示dbml属性,可以修改Context和生成实体的命名空间

defc0a4f787ba53a8c7a49572e2c24b4.png

3. 到现在为止VS2010通过工具为我们创建好了数据表对应实体类和数据表操作添,改,删的方法,现在开始实践

1) 添加 Add

static void Add()

{

//添加一个Student

Student aStudent = new Student

{

Name = "张小二",

Hometown = "南海观音院"

};

Console.WriteLine("----------begin Add a student");

using (DbAppDataContext db = new DbAppDataContext())

{

db.Log = Console.Out;

db.Students.InsertOnSubmit(aStudent);

db.SubmitChanges();

}

Console.WriteLine("----------End Add a student");

}

输出的sql语句

INSERT INTO [dbo].[Student]([Name], [Hometown])

VALUES (@p0, @p1)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]

-- @p0: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [张小二]

-- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [南海观音院]

-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1

2) 使用linq to sql执行Edit 编辑操作

private static void Edit(int id)

{

Console.WriteLine("----------begin edit");

using (DbAppDataContext db = new DbAppDataContext())

{

db.Log = Console.Out;

//取出student

var editStudent = db.Students.SingleOrDefault(s=>s.ID == id);

if (editStudent == null)

{

Console.WriteLine("id错误");

return;

}

//修改student的属性

editStudent.Name = "张小三";

editStudent.Hometown = "张家口张家寨张家营";

//执行更新操作

db.SubmitChanges();

}

Console.WriteLine("---------end edit Student");

}

输出的sql语句

SELECT [t0].[ID], [t0].[Name], [t0].[Hometown]

FROM [dbo].[Student] AS [t0]

WHERE [t0].[ID] = @p0

-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [6]

-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1

UPDATE [dbo].[Student]

SET [Name] = @p3, [Hometown] = @p4

WHERE ([ID] = @p0) AND ([Name] = @p1) AND ([Hometown] = @p2)

-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [6]

-- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [张小二]

-- @p2: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [南海观音院]

-- @p3: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [张小三]

-- @p4: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [张家口张家寨张家营]

-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1

3)使用linq to sql 执行删除操作

执行代码:

static void Delete(int id)

{

Console.WriteLine("-----------begin delete a student");

using (DbAppDataContext db = new DbAppDataContext())

{

db.Log = Console.Out;

//取出student

var student = db.Students.SingleOrDefault(s => s.ID == id);

if (student == null)

{

Console.WriteLine("student is null");

return;

}

db.Students.DeleteOnSubmit(student);

db.SubmitChanges();

}

Console.WriteLine("------------end Delete student");

}

生成的sql语句:

SELECT [t0].[ID], [t0].[Name], [t0].[Hometown]

FROM [dbo].[Student] AS [t0]

WHERE [t0].[ID] = @p0

-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [6]

-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1

DELETE FROM [dbo].[Student] WHERE ([ID] = @p0) AND ([Name] = @p1) AND ([Hometown

] = @p2)

-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [6]

-- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [张小三]

-- @p2: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [张家口张家寨张家营]

-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1

总结:通过以上实践可以看到使用linq to sql执行增改删操作,非常方便,我们甚至不需要学习任何sql相关的知识。

我有两点疑惑,请各位指点:

1.  是否是在执行update和delete时必须先获得实体,然后才能执行操作,我尝试在update时,不去数据库中获取实体,而是自己声明一个实体,然后去删除,但是失败了

2.  在生成的update和delete的条件语句中包含name=@p和hometown=@p的语句,按理说link to sql已经知道id是唯一的主键,为什么还会传这些没有的条件进去的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis session 超时时间_Shiro性能优化:解决Session频繁读写问题

点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达作者 | 张永恒来源 | urlify.cn/YjEZNj背景Shiro 提供了强大的 Session 管理功能,基于 Shiro 实现 Session 共享非常方便,只需要定制一个我们自己的SessionDAO&#x…

mysql too many connections_mysql too many connections 解决方法

1、mysql -u root -p 回车输入密码进入mysql2、show processlist;查看连接数,可以发现有很多连接处于sleep状态,这些其实是暂时没有用的,所以可以kill掉3、show variables like "max_connections";查看最大连接数,应该是…

qt更改类名_Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用场景需要…

sudo mysql压缩备份解压操作_高效管理文件之压缩及解压缩 .bz2 文件

对文件进行压缩,可以通过使用较少的字节对文件中的数据进行编码来显著地减小文件的大小,并且在跨网络的文件的备份和传送时很有用。 另一方面,解压文件意味着将文件中的数据恢复到初始状态。Linux 中有几个文件压缩和解压缩更具,比…

zygoteinit.java_源码跟踪之启动流程:从ZygoteInit到onCreate

InstrumentationSDK版本名称: PieAPI Level: 28一、源码调用时序图1. Activity的启动流程说明:其中ActivityThread中执行的scheduleTransaction方法在其父类ClientTransactionHandler中,发送了ActivityThread.H.EXECUTE_TRANSACTION,Activity…

小城交通大转型!苏州金龙助力杭州建德公交开新格局

新安江畔,密林丛生,一辆辆绿色巴士穿梭而行,杭州市首款纯电动无站立位公交车正在试运行中。 12月19日,杭州建德,23辆苏州金龙海格牌6米无站立位新能源纯电动公交车正式交付建德市公共交通运输有限公司。自此&#xff…

java虚拟机性能优化_死磕Java虚拟机-性能调优实战篇

Java命令分为如下三种1. 以java - 开头:标准参数2. 以java -X 开头:非标参数3. 以java -XX 开头:性能调优主要用这个开头的参数,但是无法找到相关参数的帮助文档,下面我教大家几个常用的命令-XX:UseSerialGC Seria…

java volatile 原子性_Java中volatile不能保证原子性的证明

Java并发编程之验证volatile不能保证原子性通过系列文章的学习,凯哥已经介绍了volatile的三大特性。1:保证可见性 2:不保证原子性 3:保证顺序。那么怎么来验证可见性呢?本文凯哥(凯哥Java:kaigejava)将通过代码演示来证…

mysql 漏洞如何修复_Mysql漏洞修复方法思路及注意事项

【系统环境】系统环境:Red Hat Enterprise Linux Server release 5.4 (Tikanga) 5.7.16 MySQL Community Server (GPL)【漏洞信息】漏洞信息报告,根据集团第三方软件扫描出对应数据库版本的漏洞信息,可以从DVE号跟当前数据库发布版本时间来判…

Java飞机大战敌机消失_Shoot 飞机大战,功能是子弹打在敌机上, 消失 且在内存中 , 小蜜蜂上同理 Games 游戏 247万源代码下载- www.pudn.com...

文件名称: Shoot下载 收藏√ [5 4 3 2 1 ]所属分类: Games开发工具: Java文件大小: 371 KB上传时间: 2015-12-01下载次数: 0提 供 者: 刘星详细说明:飞机大战,功能是子弹打在敌机上,子弹消失敌机消失且在内存中消失,打在小蜜…

日志分析告警实现java_关于Aborted connection告警日志的分析

前言:有时候,连接MySQL的会话经常会异常退出,错误日志里会看到"Got an error reading communication packets"类型的告警。本篇文章我们一起来讨论下该错误可能的原因以及如何来规避。1.状态变量Aborted_clients和Aborted_connects…

网页java在div输出内容_JS实现读取xml内容并输出到div中的方法示例

本文实例讲述了JS实现读取xml内容并输出到div中的方法。分享给大家供大家参考,具体如下:note.xml文件结构:GeorgeJohnReminderaJohnReminderGeorgeJohnReminder利用js将xml输出到div中:www.jb51.net js读取xml.aaaa{width: 30%;height: 50px;…

java枚举加载顺序_java 中类的加载顺序(转)

1、虚拟机在首次加载Java类时,会对静态初始化块、静态成员变量、静态方法进行一次初始化2、只有在调用new方法时才会创建类的实例3、类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始化块部分,然后是父类的构造方法…

java相遇问题_两车追及或相遇问题(hdu1275)数学题

两车追及或相遇问题Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 902 Accepted Submission(s):259Problem Description外号叫“猪头三”的小学生在数学课上,经常遇到两车相遇或追及的方程题,…

java常用class类_java常用类

java常用类内部类1.成员内部类:在一个类的内部定义一个完整的类例如:外部类public class Body{内部类class Header{}}内部类可以直接访问外部类的私有成员,而且不破坏封装内部类可以为外部类提供必要的功能组件,成员内部类 在类的…

mysql 分类计数器_PHP MySQL映像计数器

我是PHP新手,一直在研究计数器.计数器很好用,但是现在我想将数字转换成图像.我创建了12张图片0-9,一个空格和一个逗号图片.我在上下搜索,以获取将数字格式转换为图像所需的提示,但没有成功.到目前为止,我所发现的就是如何仅使用文件PHP / MySQL来建立基本的计数器,以及如何使用…

java gc时会暂停运行吗,java gc 项目终止运行

当前位置:我的异常网 编程 java gc 项目终止运行java gc 项目终止运行www.myexceptions.net 网友分享于:2013-09-03 浏览:6次java gc 项目停止运行首先感谢阿宝同学的帮助,我才对这个gc算法的调整有了一定的认识,而不是停留在过…

php 取消页面一些样式,jquery如何去除样式

jquery去除样式的方法:1、使用【removeClass()】方法,代码为【removeClass(function(index,class))】;2、使用toggleClass方法,代码为【toggleClass(class)】。本教程操作环境:windows7系统、jquery3.2.1版&#xff0c…

matlab对经济指标分析,经济背景下的数据预测分析--基于matlab建模(郑铿城)

1、经济预测概述经济预测有三个要素,实际资料是预测的依据;经济理论是预测的基础;数学模型是预测的手段;经济预测的内容包括生产和资源预测,市场预测,国民收入分配预测,居民生活质量预测等。预测…

php nginx 静态资源,Nginx实践篇(1)- Nginx作为静态资源web服务 - 静态资源压缩

一、静态资源web服务1. 静态资源类型类型文件类型浏览器端渲染HTML、CSS、JS图片JEPG、GIF、PNG视频FLV、MPEG文件TXT等其他下载文件2. 静态资源服务场景-CDN二、静态资源核心配置1. 文件读取 sendfilesendfile 是一种高效传输文件的模式.sendfile设置为on表示启动高效传输文件…