Sql 如何使用CacheParameter将DBNull.Value传递给DB

Sql 如何使用CacheParameter将DBNull.Value传递给DB,sql,ado.net,intersystems-cache,intersystems,Sql,Ado.net,Intersystems Cache,Intersystems,sql是这样的: 从姓名所在的人员中选择*? var dbParameter = command.CreateParameter(); dbParameter.Name = "myParam"; dbParameter.Value = DBNull.Value; command.Parameters.Add(dbParameter); 获取一个错误: 类型为“InterSystems.Data.CacheClient.CacheException”的异常 在InterSystems.Data

sql是这样的:

从姓名所在的人员中选择*?

var dbParameter = command.CreateParameter(); 
dbParameter.Name = "myParam";
dbParameter.Value = DBNull.Value;
command.Parameters.Add(dbParameter);
获取一个错误:
类型为“InterSystems.Data.CacheClient.CacheException”的异常
在InterSystems.Data.CacheClient.dll中发生,但未在用户代码中处理
其他信息:[SQLCODE::]
[地点:]
[%msg:的人员]
当查询更改为
其中Name=?
并且设置了DBNull.value以外的值时,则没有错误。

尝试以下操作:

Get an error:

An exception of type 'InterSystems.Data.CacheClient.CacheException' 
occurred in InterSystems.Data.CacheClient.dll but was not handled in user code

Additional information: [SQLCODE: <-1>:<Invalid SQL statement>]

[Location: <Prepare>]
[%msg: < NULL expected, : found^select * from Person where Name is :%qpar>]

这将导致错误参数的数目无效。它认为第二个?是一个不同的参数,但如果我用相同的值添加两次,它似乎可以工作。@O.O您使用的是什么数据库引擎?您可能需要使用命名参数。@O.O抱歉,我的错。我回答几个问题时感到困惑。系统间缓存似乎不支持命名参数。明确说明您必须为每个
提供一个值,“即使值相同”。因此,您所做的是正确的方法(即创建两个具有相同值的参数)。
SELECT * FROM Person 
WHERE (? IS NULL AND Name IS NULL) OR Name = ?