将ADO Recordset过滤器与SQL Server uniqueidentifier列一起使用有哪些规则?

时间:2013-07-22 17:18:31

标签: sql-server sql-server-2008 delphi ado

我正在尝试使用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属性一起使用的规则是什么。我找不到任何相关的东西。

2 个答案:

答案 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?)。