LINQ to SQL的不足
LINQ to sql虽然将数据库操作和业务逻辑隔离开来,使开发人员能够使用单一的语言和知识能够方便的操作数据库并处理业务逻辑。但是这毕竟是微软O/R解决方案的第一个版本,相比相对成熟的DataSet数据集解决方案来说,我们还是可以看到一些不足。
首先,我们注意到所有的数据实体并没有从一个基类中派生,这使得给开发通用的数据实体操作器带来了不便。相对于强类型数据集都从DataSet基类派生,笔者认为数据实体这样做并不是一个很好办法。因为我们可以从DataTable的Columns集合中枚举某张数据库表中的所有字段,却不能够从某个数据实体中枚举该数据库表的所有字段。虽然我们可以通过使用反射的方法获得,但是这样显然并不好。
同理,DataContext也没有提供一个获得所有数据实体的集合的方式,我们无法获得一个DataContext中所有的数据实体,与此相对应的是,即便是强类型数据集,我们也能够通过Tables属性获得该数据集中所有的数据表。
一个典型的例子就是,在笔者的上一本书《ASP.NET 2.0网站开发技术详解》中,提到了一个在多服务器部署的N层应用程序解决方案中实现的中间层数据缓存的项目。在该项目中,就是通过枚举内容中驻留的数据集的数据表的方式来确定某张数据库表中的数据是否被缓存(当然还通过了其他一系列的方法来判断),而如果使用LINQ to sql,这样一个通用的数据缓存方案就很难实现了。
同样,如果希望开发一个快速开发平台,通过配置的方式来实现数据的呈现和处理,比如希望通过配置XML文件来控制实现GridView列表或者Edit详细界面显示的字段的话,目前版本的LINQ to SQL便无法实现了。
再如,假设有这么一个需求,需要查询指定数据库表中某个数据类型为字符串型的字段含有某个指定值的记录,那么使用LINQ to SQL实现也会比较困难。
另外,我们知道DataSet数据集中还有一个数据版本的概念,一共有Original、Current、Proposed、Default四种版本,我们在对数据进行操作时可以根据数据行的不同版本值以及其他条件决定是否对数据进行更新,也即AcceptChanges或RejectChanges。而在LINQ to SQL中,要获得实体数据的变更却非常麻烦,必须使用DataContext的GetChangeSet方法来获得,而且获得的变更集能够提供的信息也实在太有限,要对某一具体数据取消更新也很困难,基本上可以认为是不可能的。
所以,当我们在考虑使用数据集方式还是LINQ to SQL实体对象模型来操作数据库的时候应当充分考虑以上情况并结合
相关文档:
TOP 增强。可以指定一个数字表达式,以返回要通过查询影响的行数或百分比,还可以根据情况使用变量或子查询。
可以在DELETE、UPDATE和INSERT查询中使用TOP选项。
2、更好地替换SET ROWCOUNT选项,使之更为有效。
OUTPUT
1、SQL Server 2005引入一个新的OUTPUT子句,以使您可以冲修改语句(INSERT、UPDATE、DELETE)中 ......
To generate a deployment script using generate scripts
Open
Management Studio and connect to the SQL Server instance where the
managed assembly or database object to be deployed is registered.
In the Object Explorer
, expand the <server name>
and Databases
trees. Right-click ......
1用于排序的函数
row_number()
rank()
dense_rank()
ntile(group_number)
下面列举这个函数的用法:
row_number()函数一般用于组内排序,而其他三个函数是对结果集排序
例子:分页排序
<!--注意全局变量也在这里声明,并用逗号隔开-->
create proc MyDividePageSort @iRowCount int ,@iPageNo int
AS
< ......