‘壹’ linq to sql 的执行效率问题
linq开发效率高,写出的代码看着舒服,而且在编译时就可以查出错误,如果有语法错误编译是不会通过的,这样后期维护起来就方便多了。你可以想想,如果是ADO.NET,不用存储过程话,把sql语句全都写在代码里,在编译时你是看不出错误的,只有运行起来以后慢慢调试才知道sql语句有没有写错,或者先把sql语句放到数据库里跑一遍再写进程序里,但开发效率都很低。时间就是成本啊,现在的开发越来越讲究开发效率和可维护性了,历史证明为此牺牲执行效率是值得的,毕竟硬件也一直再发展。否则都用汇编写代码执行效率肯定最高的。
‘贰’ LInQ查询问题,急!!!!!!
linq做这种基本很难,除非你引入动态linq核心库,那个是开源的,但是那个本质就是执行sql了。
另一种就是构建linq表达式树,这个有点得不偿失,性能也不怎么样,所以说linq查询空间变化的结构就是鸡肋了。
------------------------------------------------------------------
你变成如下方式吧!可以用sql代替,linq执行sql即可!
如下是我动态构建全表查询的方式,你把
INFORMATION_SCHEMA.COLUMNS变成你的参数配置表,
from T_CRD--》变成你的表。
---------------------------------------------------------------------
DECLARE @tsql nvarchar(1000)
DECLARE @colName varchar(500)
set @colName=''
SELECT @colName=@colName+COLUMN_NAME+',' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='T_CRD'
set @tsql='select ' + subString(@colName,1,len(@colName)-1) + ' from T_CRD'
exec sp_executeSQL @tsql
----------------------------------------------------------------------------------------
看你能问这个问题,估计你有点功底,加入我团队吧!数据库聚贤庄
水平不到位不会出现拉拢广告,O(∩_∩)O哈哈~
‘叁’ 在TP框架中,使用原生SQL有什么弊端
TP的查询语法是支持跨数据库的,如果原生的话,可能就不能跨数据库支持了,另外一个就是在安全过滤这块需要自己把关了,优势是性能上省去了SQL组装的开销。
‘肆’ 弱弱的问一个Linq和数据库sql性能的问题
对的。一个是从数据库拿出所有数据再筛选,一个是直接在数据库查找符合条件的数据,效率当然不一样。LINQ
TO
SQL的确存在性能问题,但是LINQ
TO
XML等其他功能还是很好用的。
‘伍’ LINQ比一般的SQL语句效率更高吗
Linq是一个范围比较大的概念,它其中不单单只有linq to sql,还有相应的linq to xml等等。所以拿linq 与SQL语句相比,没有可比性的。
但如果拿linq to sql相比的话,与SQL还是有很大的可比性的。一般情况下,你必须要明白你所指的效率是哪一方面?是数据库执行效率?还是整体成品软件运行效率?还是开发效率?
开发效率上linq to sql显然要比SQL的效率要高很多,我们使用linq to sql 可以很容易实现编程,其中的代码量也大大减少。所以如果从开发方面linq to sql的效率是毫无疑问要高于直接的SQL与数据库连接。
如果从编方译考虑,这个一般情况下,linq to sql是引入的新的技术,效率肯定是不如SQL的。好在这个编译的部分不需要开发人员或是任何用户的参与,所以即是效率差一点,对软件来说没有任何的影响。
最后一部分你可以比较感兴趣,谁对数据库的连接更快,执行效率更好?答案是linq to sql而不是直接的语句。一般我们使用直接的语句要求的是即是的执行,但事实上很多时间我们根本不需要那么多,linq to sql其实说明了就是会自动生成与表结构同样的一些对象。而这些对象在联系数据库时也是直接编译好的语句,直接联系时,两者效率是相同的。
但是,如果我们对数据进行处理时,你就会发现,linq to sql的效率为什么会更高了!因为他在读取时不但会读取当前表来填充生成的对象,同时还是延时读其相关表,为你使用有关系的表提供了极大的方便。那么你的相关表的读取效率要快了!
但不管怎么样,他们都是在站立在了ado.net的基础之上的,只不过有些自动生成了,根本不需要你再去做而已。唯一效果比较差的是,linq to sql读出的数据在系统中被转化了,同时它效率虽然变差一些,但是却带来了另一个好处,就是我们常说的SQL注入问题不再出现,你所输入的任何东西都会变成了字符串了。
其实ADO.net的方案中我们使用了datareader方案的效高是比较高的,但是对于更新却是极差的。而使用数据适配器的方案效率较底一些,更对于数据的更新是相当好的,而对于linq to sql其实它是使用数据缓存方案,也就是说linq to sql其实将数据库中的数据缓存到了对象中,如果对象发生了更改,有必须过行返馈时,它是可以进行反馈的,而是这种反馈是可控制的,事务性的。从各方面给我们带来了好处。
我们可以在更新了很多内容之后再去提交更改,那么这种效率论从理解上还是效率上都优化你的原来的语句的!所以linq to sql并非在性能上的降低,而是一种提高。
严格说来,linq to sql并不是节省了代码,相反它增加了很多代码,便幸运的是,这些代码都是由linq to sql框架自动生成的。若是换作人工,容易出错的。但在使用时,由于框架完成了大部分的代码,我们再使用linq to sql加上lambad表达式或查询表达式,我们的代码就变得极少且极简洁了!而如果使用lambad表达式或查询表达式时,它的效率显然不如直接SQL来的直接。读取效率会变得差一些的!
这是因为lambda表达式或查询表达式是一个动态编译的效果,而不是直接编译好的,他要对语句进行编译与优化以何证效率,但性能上因为多了一重处理,效率没有SQL来的直接。但一般情况下,使用linq to sql配合查询表达式或lambad表达式时,效率虽然稍差,但是带来的却是代码的简洁与易理解性,如果不配合查询表达式与lambad表达式,linq to sql的优劣还不利用体现。所以关非linq to sql的效率差,而是我们使用了查询表达式的动态编译导致了效率较差。就linq to sql本身上来就,效率并不差的!
‘陆’ LINQ TO SQL 有什么优缺点啊
首先,在了解 LINQ To SQL 有什么优点之前,我们有必要首先了解下,微软为什么弄了这么个东西。 搞出这个东西来有什么目的:——当然是为了 满足不知道怎么操作数据的程序员开发设计的,并不是每个程序员 都会直接操作数据库,LinQ 可以让他们以一种面向数据对象的方式来思考,及持久化他们的数据!
好处: 容易学习,书写简单。 在开发 中小型 项目 的时候推荐使用!因为可以节省时间!
它可以很方便的调用 存储过程、SQL函数
缺点:由于直接封装了所有的数据持久操作。导致批量持久数据会产生效率问题
尤其体现在批量跟新数据,它会在内存中保持大量的数据模型。
总结:中小型 项目 就放心用吧! 不过从技术 储备的角度来说,建议 看看entity framework
‘柒’ 如何用LINQ防止SQL注入式攻击
SQL注入式攻击是在登陆时要考虑到的问题,在asp.net中,常常使用参数传递来防止SQL注入式攻击。
例如开发一个管理员登录功能,登录名为admin。正确的SQL语句应该是
Select count(*) from LoginInfo where Name='admin'
如果在登录名文本框中输入"admin=1",单击登录,此时SQL语句会被转换成下面代码
Select count(*) from LoginInfo where Name='admin'='1'
LINQ to SQL 在用于数据存取时,清除了SQL注入式攻击。
‘捌’ LinQ 可以取代SQL语句吗
个人认为目前还不可以了因为LINGQ的局限性很大,复杂一点的SQL语句难以用LINGQ编写或编写麻烦。
‘玖’ SQL注入的特点与危害分别有哪些
1、广泛性:任何一个基于SQL语言的数据库都可能被攻击,很多开发人员在编写Web应用程序时未对从输入参数、Web表单、Cookie等接收到的值进行规范性验证和检测,通常会出现SQL注入漏洞。
2、隐蔽性:SQL注入语句一般都嵌入在普通的HTPP请求中,很难与正常语句区分开,所以当前许多防火墙都无法识别予以警告,而且SQL注入变种极多,攻击者可以调整攻击的参数,所以使用传统的方法防御SQL注入效果非常不理想。
3、危害大:攻击者可以通过SQL注入获取到服务器的库名、表名、字段名,从而获取到整个服务器中的数据,对网站用户的数据安全有极大的威胁。攻击者也可以通过获取到的数据,得到后台管理员的密码,然后对网页页面进行恶意篡改。这样不仅对数据库信息安全造成严重威胁,对整个数据库系统安全也有很大的影响。
4、操作方便:互联网上有很多SQL注入工具,简单易学、攻击过程简单,不需要专业的知识也可以自如运用。
‘拾’ .net4.0中怎么使用LINQ与SQL结合。
使用linq的这个方法 ExecuteCommand()
//
// 摘要:
// 直接对数据库执行 SQL 命令。
//
// 参数:
// command:
// 要执行的 SQL 命令。
//
// parameters:
// 要传递给命令的参数数组。注意下面的行为:如果数组中的对象的数目小于命令字符串中已标识的最大数,
则会引发异常。如果数组包含未在命令字符串中引用的对象,则不会引发异常。如果任一参数为
// null,则该参数会转换为 DBNull.Value。
//
// 返回结果:
// 一个 int,表示所执行命令修改的行数。
public int ExecuteCommand(string command, params object[] parameters)