2009-07-28 4 views
0

partie d'une source de données ASP.Net 2:Impossible de filtrer Oracle SELECT ASPX

SelectCommand="SELECT BU.P_GEAC_CORP_CD AS Corp_Code, 
         BU.Business_unit as Abbreviation, 
         CC.DEPTID   AS Cost_Center, 
         CC.DESCR   AS Description 
       FROM fstst.PS_P_CATR_BUDPT_VW CC, 
         fstst.ps_p_bus_unit_cnv BU 
       WHERE BU.Business_unit = CC.Business_unit"> 

Cela alimente un GridView qui fonctionne. L'affichage montre que

CC.DESCR   AS Description 

est le texte (non numérique).

Je veux utiliser une zone de texte comme « contient » filtre, à savoir, si je mets « Recovery » dans la boîte, Je veux ajouter la source de données

AND CC.DESCR Like '%Recovery%' 

à SQL. Si je code dur cette ligne, cela fonctionne.

Mais si j'ajoute

<SelectParameters> 
    <asp:ControlParameter ControlID="Dept_Name" 
          Name="DName" 
          PropertyName="Text" 
          Type="string" /> 
</SelectParameters> 

sans changer le SQL, je reçois pas lignes retournées. Ensuite, si je mets

AND CC.DESCR Like '%' + :DName + '%' 

dans le SQL, je reçois aucun résultat lorsque la zone de texte est vide, et ORA-01722: numéro invalide dès que je mets des personnages dedans.

Répondre

0

Vous devez utiliser des guillemets simples autour du texte lorsque vous utilisez une instruction similaire avec une chaîne.

Il doit ressembler

AND CC_DESCR LIKE '%VALUE%' 
+0

Merci, mais les guillemets simples _are_ là dans ET CC.DESCR Comme '%' +: + dName '%' et par la manière, ET CC.DESCR Comme '%: dName%' obtient la même résultat –

+0

pouvez-vous me montrer la requête exacte telle qu'elle est exécutée dans ORACLE? – northpole

+0

Si vous voulez dire le SQL, c'est dans la question. Si vous voulez dire quelque chose d'autre, je ne sais pas ce que vous voulez dire. –

1

Merci pour la tentative, "birdlips."

Malheureusement, la journalisation minimale du serveur Oracle était activée. De plus, pendant que je visitais le DBA, stackoverflow s'est retrouvée sur la liste des sites interdits de notre société. Donc je ne pouvais pas partager la réponse.

Cela doit être un fait peu connu à propos d'Oracle, car nos deux DBA ne l'ont pas non plus compris: Oracle pense que plus est pour les chiffres quel que soit le contexte.

Cela a fonctionné dès que j'ai changé + à ||

+0

'||' est en fait l'opérateur de concaténation de chaîne standard ANSI, il n'est donc pas rare de trouver cela. – Gabe

Questions connexes