ODB C Comman добавить несколько параметров с одним значением - PullRequest
0 голосов
/ 17 января 2020

У меня есть запрос postgresql, который имеет несколько параметров, я понимаю, как эти параметры, использующие OdbcCommand в C#, основаны на позиции, а не на имени, однако все параметры будут иметь одинаковое значение, мне интересно, есть ли способ присвоить значение параметра только один раз вместо четырех.

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

1 Ответ

1 голос
/ 17 января 2020

Невозможно при использовании ODB C. В ODB C именованные параметры используются только в вызовах хранимых процедур и не могут использоваться в других операторах SQL. https://docs.microsoft.com/en-us/sql/odbc/reference/develop-app/binding-parameters-by-name-named-parameters?view=sql-server-ver15.

Однако это возможно при использовании драйвера. Net Oracle, а не ODB C.

...