我正在尝试使用ADO Filter属性来过滤带有uniqueidentifier
列的Recordset。我正在使用SQLOLEDB.1
提供程序在Windows 7上使用ADO连接到SQL Server 2008。
我创建一个Recordset并使用它将SQL查询发送到服务器。然后我设置ADO Recordset.Filter
属性。无论我为Filter做了什么,我都会遇到错误。
如果我尝试
[column name] = '5D9C83FB-E758-0D4B-B1C7-E751D951B67C'
我得到了
无法打开过滤器。
如果我尝试
[column name] like '%5D9C83FB-E758-0D4B-B1C7-E751D951B67C%'
我得到了
无效的班级字符串。
(注意:为了清楚起见,我省略了所有必需的双引号。我能够搜索其他类型的字符串列,因此引用不是问题。)
我正在使用Delphi XE2,但我认为这可能不相关,因为我直接创建我的ADO对象而不是使用任何包装代码。我对Filter
的任何字符串类型列中的uniqueidentifier
属性没有任何问题。
我的基本问题是,如果你可以做这个工作,你怎么做(没有在查询期间将列转换为字符串)?更一般的问题是将uniqueidentifier
列与Filter
属性一起使用的规则是什么。我找不到任何相关的东西。
答案 0 :(得分:1)
在这两种情况下,你都将它们视为字符串。我建议尝试用花括号包装GUID值:
[column name] = '{5D9C83FB-E758-0D4B-B1C7-E751D951B67C}'
答案 1 :(得分:1)
在Delphi(和大多数其他框架)中,您无法在RecordSet中本地过滤GUID,其语法类似于带字符串的LIKE。对于框架,GUID只是一堆字节,而不是字符串。
您必须使用SQL Server自身支持的LIKE语法在服务器端进行过滤(语法示例位于How to use SQL's LIKE on a guid in Entity Framework?)。