SQL Compact选择前1名
在将应用程序从SQL 2005移植到SQL Server Compact Edition时,我发现需要移植此命令:
SELECT TOP 1 Id FROM tblJob WHERE Holder_Id IS NULL
但是SQL Server Compact Edition不支持TOP
关键字。如何移植此命令?
解决方案
看起来它不能紧凑地完成。我们必须阅读所有作业,或者制作一个SqlReader,然后才阅读第一个作业。
SELECT TOP(1) Id FROM tblJob WHERE Holder_Id IS NULL
据我所需要的括号。
参考:http://technet.microsoft.com/en-us/library/bb686896.aspx
另外:同样,仅适用于3.5版以上的版本
这与问题有点正交。
实际上,SQL Server Compact Edition在SQL查询方面的表现并不理想。通过直接打开表,我们可以获得更好的性能。在.NET中,我们可以通过将命令对象的CommandText属性设置为表名,并将CommandType属性设置为CommandType.TableDirect来实现此目的。
如果要过滤结果,则需要在表上的索引作为过滤依据。通过设置IndexName属性指定要使用的索引,并使用SetRange设置过滤器。
然后,我们可以阅读任意数量的记录。
很好地找到了一个原因。 Management Studio拥有并使用其自己的SQL Server Compact版本。有关更多信息,请参见http://en.wikipedia.org/wiki/SQL_Server_Compact。
SQL Server Management Studio 2005 can read and modify CE 3.0 and 3.1 database files (with the latest service pack), but the SQL Server Management Studio 2008 from the "Katmai" 2008 CTP release (or later) is required to read version 3.5 files. The RTM of SQL Server Management Studio 2008 and Microsoft Visual Studio Express 2008 SP1 can create, modify and query CE 3.5 SP1 database files.
我已经使用了SqlCEDataAdapter的Fill方法。你可以做:
DbDataAdapter.Fill(DataSet,Int32,Int32,String)添加或者刷新DataSet中指定范围内的行,以匹配使用DataSet和DataTable名称的数据源中的行。
由.NET Compact Framework支持。
http://msdn.microsoft.com/zh-cn/library/system.data.common.dbdataadapter.fill(v=VS.80).aspx