ODBC Comman 添加一个值的多个参数

ODBC Comman add multiple parameters with one value

我有一个具有多个参数的 postgresql 查询,我了解在 C# 中使用 OdbcCommand 的参数是如何基于位置而不是基于名称的,但是所有参数都将具有相同的值,我想知道是否有只分配一次参数值而不是四次的方法。

comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;

而不是

comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;
comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;
comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;
comm.Parameters.Add("@clientid", OdbcType.VarChar).Value = clientid;

下面是我将要使用的查询

    SELECT cp.blkofbusid            AS LOB,
       cp.clientid              AS GroupID,
       cp.locationname          AS Division, 
       benefitplanid, 
      ( select clientname from client where clientid=? and blkofbusid <> 'HOLD')
FROM   clientpricovebenefitplan cp
       LEFT OUTER JOIN clientlocation cl
                ON cp.clientid = cl.clientid
                AND cp.locationname = CASE WHEN cp.locationname <> 'N/A' THEN cl.locationname ELSE cp.locationname END
WHERE  cp.clientid =?
       AND cp.locationname IN 
       (
                SELECT CASE
                        WHEN cpb.locationname <> 'N/A' AND (SELECT Count(a.locationname) FROM clientpricovebenefitplan a WHERE  a.locationname <> 'N/A' AND a.clientid =? and blkofbusid <> 'HOLD') > 0 THEN
                                locationname
                        WHEN (SELECT Count(b.locationname) FROM clientpricovebenefitplan b WHERE  b.locationname <> 'N/A' AND b.clientid =? and blkofbusid <> 'HOLD') = 0 THEN
                                'N/A'
                        END AS divcode
                FROM clientpricovebenefitplan cpb
                WHERE  
                        cpb.clientid =?
        )
ORDER BY
        division

如果使用 ODBC 则不可能。在 ODBC 中,命名参数仅用于存储过程的调用,不能用于其他 SQL 语句。 https://docs.microsoft.com/en-us/sql/odbc/reference/develop-app/binding-parameters-by-name-named-parameters?view=sql-server-ver15.

但是,如果使用 .Net Oracle 驱动程序而不是 ODBC 是可能的。