谷普下载站-绿色软件_谷普绿色软件_最好的免费绿色软件下载网站
TAG标签| 网站地图| 设为首页| 加入收藏
当前位置:谷普下载站 > 软件下载 > 编程开发 > 编程软件 >

LINQ_to_SQL语法及实例大全

类型:编程软件

语言:中文

更新:2024-10-29 19:57

大小:1.3M

版本:

平台:WinAll, Win7

标签:Sql

  • 软件介绍
  • 软件截图
  • 相关下载

LINQ_to_SQL语法及实例大全,想学LINQ_to_SQL语法的快点下载

LINQ to SQL:怎么样直接实行SQL语句

1、ExecuteQuery办法
看命名,大家比较容易联想到ADO.NET里熟知的Command的ExecuteNonQuery办法,但VS的智能提示告诉大家这个办法返回的是一个泛型集合,应该“所思非所得”。下面通过一个简单办法,验证大家的猜想(设计可以参考这一篇):
///
summary
/// 直接实行sql语句,获得总人数
/// /summary
/// returns/returns
public int GetTotalCount
{
string strSql = SELECT COUNT FROM Person;
var query = dataContext.ExecuteQueryint;
int result = query.Firstint;
Console.WriteLine;
Console.WriteLine;
return result;
}
调试的时候,通过IntelliTrace跟踪到:
毫无疑问,上面的图片说明刚开始的想法是不正确的,”ADO.NET:实行Reader…”云云,让大家愈加坚信它实质实行的应该是ExecuteReader办法。当然最简单的办法是直接查询它的办法说明:
// 摘要:
// 直接对数据库实行 SQL 查看并返回对象。
//
// 参数:
// query:
// 要实行的 SQL 查看。
//
// parameters:
// 要传递给命令的参数数组。注意下面的行为:假如数组中的对象的数目小于命令字符串中已标识的最大数,则会引发异常。假如数组包括未在命令字符串中引用的对象,则不会引发异常。假如某参数为
// null,则该参数会转换为 DBNull.Value。
//
// 种类参数:
// TResult:
// 返回的集合中的元素的种类。
//
// 返回结果:
//
由查看返回的对象的集合。
public IEnumerableTResult ExecuteQueryTResult; ExecuteQuery
办法还有一个非泛型办法:
//
// 摘要:
// 直接对数据库实行 SQL 查看。
//
// 参数:
// elementType:
//
要返回的 System.Collections.Generic.IEnumerableT 的种类。使查看结果中的列与对象中的字段或属性相匹配的算法如下所示:假如字段或属性映射到特定列名字,则结果集中应包括该列名字。假如未映射字段或属性,则结果集中应包括其名字与该字段或属性相同的列。通过先查找区别大小写的匹配来实行比较。假如未找到匹配项,则会继续搜索不区别大小写的匹配项。假如同时满足下列所有条件,则该查看应当返回(除延迟加载的对象外的)对象的所有跟踪的字段和属性:T
// 是由 System.Data.Linq.DataContext 显式跟踪的实体。System.Data.Linq.DataContext.ObjectTrackingEnabled
// 为 true。实体具备主键。不然会引发异常。
//
// query:
// 要实行的 SQL 查看。
//
// parameters:
// 要传递给命令的参数数组。注意下面的行为:假如数组中的对象的数目小于命令字符串中已标识的最大数,则会引发异常。假如数组包括未在命令字符串中引用的对象,则不会引发异常。假如某参数为
// null,则该参数会转换为 DBNull.Value。
//
// 返回结果:
//
由查看返回的对象的 System.Collections.Generic.IEnumerableT 集合。
public IEnumerable ExecuteQuery;
看它的参数需要多传递一个elementType,明显不如泛型办法简洁。

2、ExecuteCommand办法
同样道理,这个办法立刻让大家联想到(世界没联想,生活将会如何?),联想到,等等,不知联想到什么。然后大家看一下办法使用详解:
//
// 摘要:
// 直接对数据库实行 SQL 命令。
//
// 参数:
// command:
// 要实行的 SQL 命令。
//
// parameters:
// 要传递给命令的参数数组。注意下面的行为:假如数组中的对象的数目小于命令字符串中已标识的最大数,则会引发异常。假如数组包括未在命令字符串中引用的对象,则不会引发异常。假如任一参数为
// null,则该参数会转换为 DBNull.Value。
//
// 返回结果:
//
一个 int,表示所实行命令修改的行数。
public int ExecuteCommand; 到这里,看它的返回种类为int,表示实行命令修改的行数,这次比较容易想到ExecuteNonQuery办法。对不对呢?通过下面的代码证明大家的设想:
/// summary
/// 直接实行sql语句 依据用户Id更新体重
/// /summary
/// param name=id用户Id/param
/// param name=destWeight更新后的体重/param
/// returns/returns
public int ModifyWeightById
{
string strSql = string.Format;
int result = dataContext.ExecuteCommand;
Console.WriteLine;
Console.WriteLine;
return result;
}
调试过程中,通过IntelliTrace可以非常了解地捕获:


“ADO.NET:实行NonQuery…”基本可以断言大家的设想是正确的。
3、预防sql注入
1和2中,实行sql语句的两个办法都有一个params 种类的参数,大家又会想到ADO.NET尤为重要的sql语句的参数化预防sql注入问题。下面通过一个办法,看看linq2sql能不能预防sql注入。
(1)、直接实行拼接的sql语句(有风险)
/// summary
/// 直接实行sql语句 依据用户Id更新FirstName
/// /summary
/// param name=id用户Id/param
/// param name=destName更新后的FirstName/param
/// returns/returns
public int ModifyNameById
{
string strSql = string.Format;//这么拼接有风险
int result = dataContext.ExecuteCommand;
Console.WriteLine;
Console.WriteLine;
return result;
}
然后,在推广客户端如此调用这个办法:
int result = ServiceFactory.CreatePersonService.ModifyNameById;//更新id为10的人的FirstName
运行的时候,直接抛出异常,提示“Anders”附近有语法错误。毫无疑问,它实行的sql语句:
UPDATE Person SET FirstName=Anders WHERE Id=10 是不可以通过的,同时证明了string.format函数不可以有效预防sql注入。
(2)、直接通过linq办法的参数传递,结果怎么样呢?
改进(1)的传参办法:
/// summary
/// 直接实行sql语句 依据用户Id更新FirstName
/// /summary
/// param name=id用户Id/param
/// param name=destName更新后的FirstName/param
/// returns/returns public int ModifyNameById
{
//string strSql = string.Format;//这么拼接有风险
//int result = dataContext.ExecuteCommand;
string strSql = UPDATE Person SET FirstName={0} WHERE Id={1};
int result = dataContext.ExecuteCommand;
Console.WriteLine;
Console.WriteLine;
return result;
}
第三通过如下的方法调用:
int result = ServiceFactory.CreatePersonService.ModifyNameById;//更新id为10的人的FirstName 这一次运行是否正常?经测试,真的真的是真的正常,终于可以长松一口气了。查询数据库,Id为10的那一条记录的FirstName结果改变成了“Anders”(带单引号),了解ADO.NET工作原理的都了解这个一点也不神奇,不是吗?
对比(1)和(2),大家发现还是用linq2sql的源生办法传参最好,通过拼接sql应该尽可能防止。
到这里,可能你会觉得上面1、2、3全是废话,了解如何使用不就好了嘛?!其实非常长一部分时间我也是这么想这么做的。工作久了,早就习惯了不求甚解,目前看书,看园子里高手的博客,多多少少会有点深思。
4、考虑
ADO.NET中比较常见的ExecuteScalar办法,在linq2sql如何达成呢?你尝试用过了吗?

TAG标签:Sql(3)

转载请说明来源于谷普下载站(https://www.muerya.com)

本文地址:https://www.muerya.com/soft/1831.html

郑重声明:文章来源于网络作为参考,本站仅用于分享不存储任何下载资源,如果网站中图片和文字侵犯了您的版权,请联系我们处理!邮箱3450399331@qq.com