Erweiterung von OdbcParamAdd

Die CONZEPT 16 ODBC-Befehle ermöglichen den Zugriff auf Datenbanken, die über einen ODBC-Treiber angesteuert werden können. Der Befehl OdbcParamAdd() bietet hierbei die Möglichkeit SQL-Statements zu parametrisieren. Im kommenden Release wird der Befehl um ein zusätzliches optionales Argument erweitert. Dieser Artikel erklärt warum.

Das binden von Parametern zur Laufzeit einer Anwendung stellt eine einfache Möglichkeit zur Modifikation einer SQL-Abfrage dar. Das folgende Beispiel verdeutlicht dies.

tStm->OdbcPrepare('SELECT * FROM Customer WHERE Customer_Name = ?');
tStm->OdbcParamAdd(_TypeAlpha,30);
tStm->OdbcParamSet(1,'Müller');
tStm->OdbcExecute();

Im obigen Fall werden alle Datensätze der Tabelle Customer selektiert, deren Datenbankfeld Customer_Name den Inhalt ‘Müller’ besitzt. Die Anweisung OdbcPrepare() bereitet das übergebene SQL-Statement für die spätere Ausführung durch OdbcExecute() vor.
Das SQL-Statement darf hierbei Platzhalter enthalten. Diese werden durch ‘?’ spezifiziert. Im Beispiel oben wird lediglich ein Platzhalter (in der WHERE-Klausel) verwendet.
Der Inhalt des Platzhalters wird durch den Befehl OdbcParamSet() definiert. Datentyp und Feldlänge des zugeordneten Wertes ergeben sich über die bei OdbcParamAdd() angegebenen Argumente.
Im Beispiel wird definiert, dass es sich bei dem zu setzenden Inhalt um alphanumerische Informationen handelt (_TypeAlpha). Der Wert 30 definiert die Länge des Inhalts.
Da das zugrunde liegende Datenbank-System nichts mit den CONZEPT 16-Datentypen anfangen kann, müssen diese in ihre SQL-Entsprechung umgewandelt werden. _TypeAlpha wird deshalb von OdbcParamAdd() in den SQL-Datentyp SQL_CHAR umgewandelt. Dies entspricht einem alphanumerischen Datentyp mit fester Länge. Einige Datenbank-Systeme füllen deshalb Inhalte, deren tatsächliche Länge kleiner als die angegebene Länge ist, bis zur definierten Länge (im Beispiel 30) mit Leerzeichen auf.
Deshalb bietet der Befehl OdbcParamAdd() nun auch die Möglichkeit ein drittes Argument anzugeben.

...
tStm->OdbcParamAdd(_TypeAlpha,30,true);
...

Wird im neuen Argument true übergeben, dann findet eine Umwandlung von _TypeAlpha in den SQL-Datentyp SQL_VARCHAR statt. Dieser bezeichnet alphanumerische Daten mit variabler Länge. Sofern das entsprechende Datenbank-Feld des zugrunde liegenden Datenbank-Systems ebenfalls mit diesem Datentyp definiert ist, findet keine Auffüllung mit Leerzeichen statt.
Die Erweiterung wird in der CONZEPT 16-Release 5.7.01 sowie in der Release 5.6.08 enthalten sein.

Klicken Sie hier, um die Nutzungsbedingungen für unseren Blog zu lesen.

5 Antworten

  1. Das SQL-Statement wird über OdbcExecuteDirect() direkt an den ODBC-Treiber übergeben. Es hängt also von diesem bzw. der zugrundeliegenden SQL-Engine ab, wie die Inhalte konvertiert werden. Auch hier kann es theoretisch zu Unterschieden zw. verschiedenen ODBC-Treibern und SQL_CHAR bzw. SQL_VARCHAR kommen.

  2. wie findet die Umwandlung statt, wenn man OdbcExecuteDirect verwendet und die Abfrage über die "normale" C16-String-Verkettung zusammenbaut ?

  3. Sehr gut!
    Jetzt wäre es noch schön, wenn wir auch den SQL-Datentyp TEXT lesen bzw. schreiben können und das auch ohne Limitation der Länge.

  4. Das ist eine gute Sache. Mit solchen parametrisierten Statements kann man z.B. SQL-Injection Attacken vorbeugen, vorausgesetzt dies wurde bei der Umsetzung der hier beschriebenen Funktionalität ebenfalls berücksichtigt.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Leave the field below empty!

Wünsche, Fragen oder Feedback sind willkommen:

Nutzungsbedingungen der Kommentarfunktion im Blog

1. Allgemeines

Vectorsoft AG („Anbieter“) stellt für Internetnutzer („Nutzer“) auf der Website
vectorsoft.de einen öffentlichen Blog bereit. Der öffentliche Blog dient dem
Informations- und Gedankenaustausch. Die Nutzer, welche sich mit Beiträgen und
Kommentaren beteiligen, verpflichten sich dazu, die Blog-Nutzungsbedingungen
einzuhalten und tragen die Verantwortung für die Richtigkeit und Angemessenheit
sowie Freiheit von Rechtsverletzungen ihrer Beiträge. Mit Nutzung der
Kommentarfunktion in unserem Blog akzeptieren Sie diese Nutzungsbedingungen.

2. Netiquette

Wir bitten Sie von persönlichen Angriffen und Provokationen aufgrund anderer
Meinungen abzusehen. Bitte argumentieren Sie sachlich und bewegen Sie sich auf
der Basis einer konstruktiven Diskussionskultur. Ihr Kommentar sollte stets im
Zusammenhang mit dem jeweiligen Thema sein, um Ausschweifungen in andere
Themenbereiche zu vermeiden. Das mehrmalige Posten desselben Kommentars
oder mehrerer ähnlicher Kommentare ist nicht erlaubt.

3. Verbot rechtswidriger Inhalte

Mit Absenden Ihres Kommentars bestätigen Sie, dass Sie keine Urheberrechte oder andere Rechte Dritter verletzen. Volksverhetzende, rassistische Äußerungen, Anleitungen zu Straftaten und deren Verherrlichung, Gewaltdarstellungen, pornografische Inhalte und Äußerungen, die Persönlichkeitsrechte verletzen sind untersagt.

4. Keine Werbung

Die Nutzung der Kommentarfunktion ist für kommerzielle oder parteipolitische
Zwecke nicht erlaubt. Werbliche Beiträge aller Art werden von uns umgehend
gelöscht.

5. Angaben zum Namen

Bei der Eingabe Ihres Namens achten Sie auf die zuvor genannten Grundsätze.

6. Quellenangaben

Bitte geben Sie bei der beabsichtigten Veröffentlichung von Zitaten oder Beiträgen
Dritter die jeweiligen Quellen an und erläutern dessen Bezug zum Blogbeitrag.

7. Verstoß gegen die Nutzungsbedingungen

Beiträge, die gegen diese Richtlinie verstoßen werden umgehend gelöscht. Sollten
Sie selbst Verstöße bemerken, so senden Sie uns bitte den Link des betreffenden
Kommentars per E-Mail an . Wir weisen ausdrücklich daraufhin, dass wir einzelne Nutzer bei wiederholten oder schweren Verstößen gegen diese
Nutzungsbedingungen ausschließen werden.

Stand: Sept. 2024

Deine Trial Version - jetzt anfordern!

Teste yeet - unverbindlich und kostenfrei

IHRE EVALUIERUNGSLIZENZ - JETZT ANFORDERN!

TESTEN SIE DIE CONZEPT 16 VOLLVERSION - UNVERBINDLICH und KOSTENFREI

Melden Sie sich bei unserem Newsletter an

Anrede*
     
Zustimmung zur Datenverarbeitung gem. DSGVO*



WordPress Cookie-Hinweis von Real Cookie Banner