Avatar billede md_craig Nybegynder
13. marts 2008 - 16:05 Der er 7 kommentarer og
1 løsning

OracleParameter og Select x Where y In (:yparameter)

Er der lige nogen som kan forklare mig hvordan man envender DbParameters i forbindelse med IN clauses.

Altså fx:

SELECT * From A Where A.Col IN (:parameter);

Hvor værdien for en parameter er en liste med Tal i nogle tilfælde og nvarchars i andre.

ønsket SQL ville være:

SELECT * From A Where A.NVarCharCol IN ('a','b');

og/eller

SELECT * From A Where A.NumberCol IN (2,3);
Avatar billede wisen Nybegynder
13. marts 2008 - 16:18 #1
.. jeg er ikke helt med, men er det noget i denne stil du mener?

OracleCommand command = new OracleCommand();
command.CommandType = System.Data.CommandType.Text;
command.BindByName = true;

StringBuilder commandBuilder = new StringBuilder();
commandBuilder.Append( "SELECT <something> " );
commandBuilder.Append( "FROM <some table> " );
commandBuilder.Append( "WHERE ID = :id " );

command.CommandText = commandBuilder.ToString();
command.Parameters.Add( "ID", id );

command.ExecuteReader();

/Wisen
Avatar billede md_craig Nybegynder
13. marts 2008 - 16:38 #2
Nej... det er specifikt med "IN" SQL statements... alt det andet har jeg på plads..
Avatar billede md_craig Nybegynder
13. marts 2008 - 16:46 #3
OracleCommand command = new OracleCommand();
command.CommandType = System.Data.CommandType.Text;
command.BindByName = true;

StringBuilder commandBuilder = new StringBuilder();
commandBuilder.Append( "SELECT <something> " );
commandBuilder.Append( "FROM <some table> " );
commandBuilder.Append( "WHERE NVarCharFetter IN (:ParameterIn)" );

command.CommandText = commandBuilder.ToString();
OracleParameter param = new OracleParameter("ParameterIn", OracleType.NVarChar);
param.Value = "'TextA','TextB','TextC'";
command.Parameters.Add( param  );

<- Det går jo tydeligvis galt når vi leder efter alle rows hvor værdien i NVarCharFetter er "TextA" Eller "TextB" eller "TextC"
Avatar billede wisen Nybegynder
13. marts 2008 - 17:01 #4
.. hmm... "There's currently no way to bind effectively to an IN clause. It's not an ODP thing, but rather an Oracle thing."

http://forums.oracle.com/forums/thread.jspa?messageID=1248007&
Avatar billede arne_v Ekspert
13. marts 2008 - 17:10 #5
Det kan man ikke.

Ikke i Oravle - ikke i andre databaser.

Parameters er ikke en tekst substitution. Man kan kun bruge parameters til enkelt vaerdier. Ikke til
flere varedier.

(og heller ikke til tabel navne etc.)
Avatar billede wisen Nybegynder
13. marts 2008 - 17:20 #6
.. ellers skal du vist ud i noget PL/SQL..

http://www.psoug.org/reference/conditions.html - søg efter "Complex IN Demo"
Avatar billede md_craig Nybegynder
13. marts 2008 - 17:54 #7
fair and square...

Anede mig der skulle være sådanne begrænsninger. så må man jo gøre det på den gode gamle måde, heldigvis er vi ikke i en sitiation hvor brugeren selv indtaster listen, men derimod bliver den valgt igennem en liste af værdier, så SQL Injection er ikke noget stører problem.

ville bare have været fantastisk dejligt om det var strømligned hele vejen igen...

Vi skal ikke ud i mere komplekse ting da det allerede er en ret komplex SQL der dynamisk bygges op i forhold til en søgning.

Takker
Avatar billede wisen Nybegynder
14. marts 2008 - 10:19 #8
.. og så et svar...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester