Mehr

ArcObjects ISQLSyntax mit Oracle DB esriSQL_DelimitedIdentifierPrefix-Problem

ArcObjects ISQLSyntax mit Oracle DB esriSQL_DelimitedIdentifierPrefix-Problem


Neu auf dieser Site, von den esri-Foren herüber, es ist großartig!

Ich versuche, eine Abfrage zu erstellen, die ich in allen Arbeitsbereichen verwenden kann, natürlich mit ISQLSyntax. Das Problem, das ich habe, ist, dass bei der Verwendung von esriSQL_DelimitedIdentifierPrefix auf einer Oracle SDE-Instanz eine Sprachmarkierung zurückgegeben wird, während ich eine leere Zeichenfolge erwarten würde. Wenn ich diesen Code auf einer FileGDB oder einer MDB verwende, funktioniert er wie erwartet, aber auf SDE erhalte ich den Fehler:

Zugrunde liegender DBMS-Fehler[ORA-00904: "table.field_name": ungültiger Bezeichner][OWNER.TABLE]

Der Fehler verschwindet, wenn ich das Präfix und Suffix entferne, damit keine Tippfehler in der Abfrage sind. Ich möchte kein SDE mit ausgewähltem Fall durchführen, da es gegen den Punkt scheint, ISQLSyntax zu haben.

Irgendwelche Ideen?

Dim Prefix Als String, Suffix Als String Dim Upper As String, sQualColName As String Prefix = pSQLSyntax.GetSpecialCharacter(esriSQLSpecialCharacters.esriSQL_DelimitedIdentifierPrefix) Suffix = pSQLSyntax.GetSpecialCharacter(esriSQLSpecialCharacter) sVal = Präfix & sQualColName & Suffix & " = " & Chr(39) & Trim(strFindString).ToUpper & Chr(39)

Als ich das gleiche in Oracle 11g ausprobiert habe, hat es gut funktioniert. Präfix und Suffix sind wie FGDBs doppelte Anführungszeichen, aber ich glaube, sie sind in Oracle optional.

Der Unterschied scheint darin zu bestehen, dass bei der Verwendung von doppelten Anführungszeichen um Ihre Spaltenbezeichner die Groß-/Kleinschreibung beachtet wird. Stellen Sie also sicher, dass alle Spaltennamen, die Sie im Code schreiben, die richtige Groß-/Kleinschreibung sind.

QualifyColumnNamekorrigiert den Fall nicht für Sie.


Benutze es nicht so.

Wenn Sie einen Tabellennamen aus der Datenbank abrufen und dessen Teile benötigen, verwenden Sie ParseTableName.

Wenn Sie das Gegenteil tun (dh Sie möchten einen vollständig qualifizierten Tabellennamen aus seinen Teilen) verwenden Sie QualifyTableName

Gleiches gilt für Spalten (ParseColumnName, QualifyColumnName)

Vorher oder nachher muss nichts angehängt werden.