AspGerman Wiki

Der Grund hierfür ist ein wenig tückisch. Wenn man SQL (Structured Query Language) Statements benutzt um einen Wert zu einer Datenbank hinzuzufügen oder Werte auszulesen, so muß man auf einen speziellen Fall achten. Sehen wir uns einmal folgendes Beispiel an:

Set conn = CreateObject("ADODB.Connection")
conn.open "DSN=MyDSN"
strName = "o'Conner"
strQuery = "SELECT * FROM Tabelle1 WHERE Name = '" & strName & "'"
Set rs = conn.Execute (strQuery)
...
Das Script wird in der letzten Zeile, also beim Ausführen des SQL Statements mit einem Fehler abbrechen. Doch warum ist das so? Sehen wir uns einmal das eigentlich ausgeführte SQL Statement an:

{br}{br}
SELECT * FROM Tabelle1 WHERE Name ='o'Conner'

Der Textwert wird durch zwei Apostrophe begrenzt. Wenn nun der Textwert selbst einen Apostroph enthält so kann SQL nicht mehr entscheiden, wo nun der Text aufhört oder nur ein Apostroph steht. Damit SQL diese Fälle unterscheiden kann muß man einen Apostroph in einem Textwert durch zwei Apostrophe angeben. Das korrekte SQL Statement würde also so lauten:

SELECT * FROM Tabelle1 WHERE Name ='o''Conner'

Man beachte die zwei Apostrophe zwischen "o" und "Conner".



Um nun sicherzustellen, daß bei einem Textwert ein Apostroph automatisch durch zwei Apostrophe ersetzt wird, kann man die VBScript Funktion Replace benutzen, die in einem Text eine beliebige Zeichenkette durch eine andere ersetzt.



Also müßte man das Beipiel Script ändern, sodaß die letzten zwei Zeilen wie folgt lauten:

strQuery = "SELECT * FROM Tabelle1 WHERE Name = '" & _
	Replace(strName,"'","''") & "'"

Man sollte aus Vorsichtsgründen dieses Replace bei allen SQL Statements benutzen, bei denen man Textwerte dynamisch einfügt.



Dies ist auch beim UPDATE Statement der Fall. Wenn man nun ein solches Statement erstellt, so sollte man auch dafür sorgen, daß in allen Textwerten ein Apostroph durch zwei ersetzt wird. Ein Statement, das keinen Apostroph verträgt:

strQuery = "UPDATE Tabelle SET Name = '" & strName & _
	"' WHERE Stadt ='" & Stadt & "'"

Besser ist:

strQuery = "UPDATE Tabelle SET Name = '" & _
	Replace(strName,"'","''") & _
	"' WHERE Stadt ='" & Replace(Stadt,"'","''") & "'"

ScrewTurn Wiki version 2.0.33. Some of the icons created by FamFamFam.