0

我正在尝试使用 ADO Filter 属性来过滤带有uniqueidentifier列的 Recordset。我正在使用SQLOLEDB.1提供程序在 Windows 7 上使用 ADO 连接到 SQL Server 2008。

我创建了一个 Recordset 并使用它来将 SQL 查询发送到服务器。然后我设置 ADORecordset.Filter属性。无论我为过滤器尝试了什么,我都会遇到错误。

如果我尝试

[column name] = '5D9C83FB-E758-0D4B-B1C7-E751D951B67C'

我明白了

无法打开过滤器。

如果我尝试

[column name] like '%5D9C83FB-E758-0D4B-B1C7-E751D951B67C%'

我明白了

无效的类字符串。

(注意:为了清楚起见,我省略了所有必需的双引号。我可以搜索其他类型的字符串列,所以引用不是问题。)

我正在使用 Delphi XE2,但我认为这可能不相关,因为我直接创建我的 ADO 对象而不是使用它们的任何包装器代码。Filter我对任何各种字符串类型列上的属性都没有问题,只是uniqueidentifier.

我的基本问题是,如果你能做到这一点,你是怎么做到的(在查询期间没有将列转换为字符串)?更普遍的问题是使用带有属性uniqueidentifier的列的规则是什么。Filter我找不到任何相关的东西。

4

2 回答 2

1

在这两种情况下,您都将它们视为字符串。我建议尝试将 GUID 值包装在花括号中:

[column name] = '{5D9C83FB-E758-0D4B-B1C7-E751D951B67C}'
于 2013-07-22T18:18:06.110 回答
1

在 Delphi(和大多数其他框架)中,您无法在 RecordSet 中本地过滤 GUID,其语法类似于使用字符串的 LIKE。对于框架来说,GUID 只是一堆字节,而不是字符串。

您必须使用 SQL Server 本身支持的 LIKE 语法在服务器端进行过滤(该语法的一个示例是如何在实体框架中的 guid 上使用 SQL 的 LIKE?)。

于 2013-07-23T07:41:30.887 回答