Laden...

Probleme mit Oracle und Parametern

Erstellt von N8wolf vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.288 Views
N
N8wolf Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren
Probleme mit Oracle und Parametern

verwendetes Datenbanksystem: <Oracle 11>

Guten Tag;

Ich habe eine Frage zu Parametern mit dem Oracle Treiber (Oracle.DataAccess.Client)

Nach einer langen Suche fand ich leider nichts was mir weiterhelfen konnte.
([Artikelserie] Parameter von SQL Befehlen half leider auch nicht).

Ich bekomme es einfach nicht hin das die Parameter befüllt werden... Ich habe schon eine menge Lösungen versucht und nichts hat geklappt.

er schreibt z.B. statt dem Benutzernamen halt eben :dbuser hin

Den SQL Befehl ahbe ich mal gekürzt weil dieser funktioniert ja eigentlich.
außerdem sind gleich 2 Lösungsvorschläge in einem also nicht wundern.

dbUser, recht <--strings und status <-- int


OracleParameter[] prm = new OracleParameter [3];
md.CommandText = "SELECT *FROM [Tabelle und par Joins] WHERE DBUSER = :dbuser[...] ARRAY like '%:recht%'AND SiD =':status'";
            cmd.Parameters.Add(new OracleParameter(":dbuser", dbUser));
            Console.WriteLine(cmd.CommandText);
            prm[0]=cmd.Parameters.Add("dbUser", OracleDbType.Varchar2);
            cmd.Parameters.Add("recht", OracleDbType.Varchar2).Value = recht;
            cmd.Parameters.Add("status", OracleDbType.Varchar2).Value = status;
            Console.WriteLine(cmd.CommandText);

Ich bedanke mich schon einmal im Vorraus für Hilfe.

LG

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo N8wolf,

du hast dort auch :dbuser stehen. Parameter mit Prefix Doppelpunkt werden jedoch nur im Connerction String und nicht in der cmd.Parameter.Add() geschrieben.

Wieso machst du es so kompliziert. Im von dir geposteten link ist es doch viel einfacher aufgezeigt worden:

OracleCommand cmd = new OracleCommand();
cmd.CommandText = "insert into emp(empno, ename, deptno) values(:1, :2, :3)";
cmd.Parameters.AddWithValue("paramEmpno", 1234);
cmd.Parameters.AddWithValue("paramEname", "Client");
cmd.Parameters.AddWithValue("paramDeptNo", 10m);

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

N
N8wolf Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

weil die Funktion AddWithValue nicht vorhanden ist

Auch hilft es auch ncihts die : zu entfernen und mit param (wie im Beispiel) zu ersetzen

 
cmd.Parameters.AddWithValue(":recht", OracleDbType.Varchar2);

Fehler	2	"Oracle.DataAccess.Client.OracleParameterCollection" enthält keine Definition für "AddWithValue", und es konnte keine Erweiterungsmethode "AddWithValue" gefunden werden, die ein erstes Argument vom Typ "Oracle.DataAccess.Client.OracleParameterCollection" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)...

LG

D
211 Beiträge seit 2006
vor 13 Jahren

Und weil AddWithValue vermieden werden sollte, da der konkrete Datentyp nicht mit angegeben wird!
Es wird dann immer object verwendet.

Gruß

DevHB

1.552 Beiträge seit 2010
vor 13 Jahren

Wie BevHB schon sagte, verwende beim hinzufügen von Parametern besser den impliziten Typ.
Siehe hier: OracleParameterCollection.Add Method (String, OracleType)

Gruß

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

N
N8wolf Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

Also entweder ich bin echt einfach zu doof oder es liegt wirklich daran das das Beispiel mit dem .net Treiber arbeitet

Ich arbeite ja mit dem Treiber vom Oracle Clienten.

(Ich habe nun 1 zu 1 das Beispiel kopiert X.x)

LG

S
417 Beiträge seit 2008
vor 13 Jahren

Hallo,

welches Beispiel hast du kopiert bzw. wie sieht denn der Quelltext jetzt aus und was genau klappt nicht?

Edit: So wie ich das aus deinem Ausgangsposting erkenne, liegt der Fehler dort darin, dass du anführungszeichen um den Parameter packst, und dieser daher nicht erkannt wird.
Versuch mal z.B. 😒tatus, statt ':status'.
Achja, die Prozentzeichen gehören auch nicht neben den Parameternamen, sondern müssen als Parameterwert definiert werden.

N
N8wolf Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

Also gerade versuche ich es nur mit einem Parameter damit es irgendwie einmal geht.

Derzeit sieht das ganze so aus:


OracleCommand cmd;
cmd = new OracleCommand(); // ist nur der vollstädigkeit dabei
            cmd.CommandText = "SELECT * FROM [Tabellen]WHERE USER =:dbUser AND [....]  
           OracleParameterCollection paramCollection = cmd.Parameters;
            object parameter = new OracleParameter("dbUser", OracleDbType.Varchar2);
            int pIndex = paramCollection.Add(parameter);
            paramCollection[0].Value = dbUser;

So liefert mir die Anfrage leider kein Ergebnis zurück da er den Parameter nciht befüllt und nunmal kein User Namens :dbUser da ist.

D.h. er ersetzt den Parameter leider nicht. Ich amche bestimmt nur iwo so einen sau dummen Fehler und durch zig versch Forenlösungen usw bin ich gerade auch ehrlich gesgat sehr sehr verwirrt. X.x

LG

S
417 Beiträge seit 2008
vor 13 Jahren

Welchen Typ hat denn die Spalte USER in der Datenbank und welchen Typ hat
deine Variable dbUser?
Woran erkennst du denn, dass der Parameter nicht befüllt wird?
Was passiert wenn du die Abfrage ohne Parameter ausführst, erhälst du dann ein Ergebnis?
Beschränk dich doch in deiner Abfrage erstmal auf das wesentliche und lass alles andere weg, z. B. die weiteren Bedingungen (AND [....]).

N
N8wolf Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

Wow es klappt,

Ich weiß nciht warum aber wenn man tatsächlich das and hinten wegnimmt geht es
(Und wenn man die Größe angibt)

Also wenn das hintere nciht befüllt wird sondern fest gecoded drin steht klappts mit dem User Namen sobald es durch eine Variable befüllt wird wiederum nicht

Also leigt der Fehler jetzt wo anders und damit ist das Thema erledigt

Danke an alle die geholfen haben

LG

1.552 Beiträge seit 2010
vor 13 Jahren

Also leigt der Fehler jetzt wo anders und damit ist das Thema erledigt

Naja, wenn du mit der Teillösung zufrieden bist schon. Mich persönlich würde es in deiner Situation interessieren warum es mit den weiteren Bedingungen nicht klappt und was an dem ConnectionString falsch ist. Der Vorteil dabei ist dass du dann bei einer in Zukunft auftretenden ähnlichen Situation weißt warum es nun wieder nicht funktioniert.

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp