Warum bekomme ich eine ORA-01722 (ungültige Nummer)?

8

Ich habe eine parametrisierte Abfrage verwendet, um Werte wie folgt in eine Oracle-Tabelle einzufügen:

%Vor%

Das hat gut funktioniert, aber plötzlich funktioniert das nicht mehr und ich erhalte den Oracle-Fehler ORA-01722 (ungültige Nummer). Ich habe die Parameter überprüft, und alle Zahlen sind zweifelsfrei gültige Zahlen. Ich habe sogar Dummy-Werte für alle Nullen ersetzt, und ich bekomme immer noch den Fehler. Ich habe die gleiche Abfrage in direkten SQL (mit OraDeveloper Studio) versucht, und es funktioniert, auch mit den gleichen Parametern.

Wie kann ich diese Datei nachverfolgen?

BEARBEITEN: pro Anfrage in den Kommentaren, hier ist die create table-Anweisung:

%Vor%     
Shaul Behr 05.10.2010, 17:47
quelle

3 Antworten

30

Ich habe bereits eine Antwort gegeben, aber ich denke, hier ist es genau erwähnenswert, was die Wurzel meiner Probleme war, falls jemand anderes diesen Gegenstand findet, während er nach einer Antwort auf sein eigenes Problem sucht.

Das Problem ist, dass die C # -Implementierung von parametrisierten Abfragen für Oracle einen ernsthaften und potenziell gefährlichen Fehler enthält - eine echte "Grube in der Öffentlichkeit":

Es spielt keine Rolle, wie Sie Ihre Parameter benennen. Sie müssen in der Reihenfolge hinzugefügt werden, in der sie in der Abfrage angezeigt werden.

Weitere hier .

    
Shaul Behr 06.10.2010, 21:51
quelle
5

Wenn Sie sagen, dass Sie die Parameter überprüft haben, meinen Sie die Parameters -Auflistung in der SqlCommand-Klasse? Sie könnten mit diesem Hinweis auf der SqlParameter-Seite in Konflikt geraten:

  

Seien Sie vorsichtig, wenn Sie diese Überladung des SqlParameter-Konstruktors verwenden, um ganzzahlige Parameterwerte anzugeben. Da diese Überladung einen Wert vom Typ Object annimmt, müssen Sie den Integralwert in einen Objekttyp konvertieren, wenn der Wert Null ist, wie das folgende C # -Beispiel zeigt.   Kopieren Sie

%Vor%      

Wenn Sie diese Konvertierung nicht durchführen, nimmt der Compiler an, dass Sie versuchen, den SqlParameter (string, SqlDbType) -Konstruktorüberladung aufzurufen.

Ich würde vorschlagen, dass Sie etwas wie

verwenden %Vor%

stattdessen, um den Typ explizit festzulegen.

    
Rup 05.10.2010 17:55
quelle
0
%Vor%

Siehe hierzu explication.

    
Dennis Kiesel 26.08.2016 15:49
quelle

Tags und Links