Laden...

Anführungsstriche in String einfügen

Erstellt von Loewchen0507 vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.784 Views
Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren
Anführungsstriche in String einfügen

Hi,

ich arbeite mit SQLServer 2005 und habe ein paar SQL Statements mit denen ich Daten in verschiedenen Tabellen schreiben. Dabei tritt folgendes Problem auf:

Ich habe einen Data Reader in dem Namen stehen... Diese Namen möchte ich eine Tabelle zurüchschreiben... der String steht so aus:


InsertCommand.CommandText = "INSERT INTO t055 (C003)" +
                                                  "Values('" + DataReader[12] +"');";

Aber in einigen Datensätzen des DataReaders stehen Namen mit einem Hochkomma zum Beispiel: Thomson's dadurch bekomme ich ein Problem mit meinem SQL Statement. Nun habe ich mir gedacht, es muss doch möglich sein die Hochkommas, Vor und nach DataReader[12], durch Anführungsstriche zu ersetzen. Wie kann ich das realisieren.

Momentane Lösung:


Char chr = '"';
InsertCommand.CommandText = "INSERT INTO t055 (C003)" +
                                                  "Values(" + chr + DataReader[12] + chr + ");";

funktioniert leider nicht.

Ich hoffe Ihr könnt mir helfen.

LG Loewchen

H
51 Beiträge seit 2007
vor 16 Jahren

Hallo!

System.Data.SqlClient.SqlParameter ist die Zauberklasse dafür.

Bau dein SQLCommand und verwende in diesem Parameter welchen du anschließend mit SqlParameter Werte zuweist.

Du solltest auf gar keinen Fall ein SQL Statement zusammen konkatenieren, such mal nach dem Stichwort SQL Injection.

Grüße

A
254 Beiträge seit 2007
vor 16 Jahren

Hallo,

ich denke es gibt in dem Zusammenhang zwei Sachen zu beachten.

Wenn Du die Interpretation von Escape Sequenzen innerhalb eines Strings ausschalten willst, kannst Du den verbatim Operator @ vor den String stellen.

Beispiel :

Console.Writeln(@"Hallo\nWelt);
Liefert keinen Zeilenumbruch.

Das zweite ist natürlich, dass ein ' innerhalb eines Datenbank Kommandos normalerweise benutzt wird, um die Begrenzung einer Zeichenkette anzugeben.

Dieses Problem hatte ich auch schon, mir ist nur folgende Lösung dazu eingefallen. Die String's die eingefügt werden sollen zu durchsuchen und alle einfachen ' durch doppelte zu ersetzen.

private string escape(string eingabe)
 {
            return eingabe.Replace(@"'", @"''");
  }
J
3.331 Beiträge seit 2006
vor 16 Jahren

Original von a957m
ich denke es gibt in dem Zusammenhang zwei Sachen zu beachten.

Wenn Du die Interpretation von Escape Sequenzen innerhalb eines Strings ausschalten willst, kannst Du den verbatim Operator @ vor den String stellen.

Das zweite ist natürlich, dass ein ' innerhalb eines Datenbank Kommandos normalerweise benutzt wird, um die Begrenzung einer Zeichenkette anzugeben.

Da muss ich widersprechen und vehement hornetbiker_1979 unterstützen:

Man kann zwar mit Escape-Sequenzen oder @ arbeiten; aber das ist - wie Du, Loewchen, gemerkt hast - umständlich und fehleranfällig und außerdem (Sql-Injection) gefährlich.

Also unbedingt SqlParameter verwenden!!!

Gruß Jürgen

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren

Ja wow,

also das nenn' ich doch mal Klasse Antworten... Ich habe mir das ganze angeschaut... und mal wieder etwas dazu gelernt... SQLParameter kenn ich noch nicht... aber habe ich das jetzt richtig verstanden?

Ich kann einen SQLParameter wie folgt erstellen???
SqlParameter parameter = new SqlParameter("@Reader",
SqlDbType.VarChar, 88, Reader[12].tostring());

LG Loewchen

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren

Jetzt muss ich nochmal nachfragen:
geht das ganze nur für Stored Procedures???
denn DAS wäre in diesem Falle nicht gut...

1.373 Beiträge seit 2004
vor 16 Jahren

Hallo,

Parameter gehen natürlich auch für normale Queries. Grundsätzlich kann man die Parameter so erstellen, wie du es gemacht hast. Vergiss nur nicht, sie auch der Parameter-Liste des Commands zuzufügen (cmd.Parameters.Add(parameter)).

Man kann oft auch den etwas bequemeren Weg gehen:


SqlCommand cmd = new SqlCommand( "SELECT u.ID, u.Name FROM Users u WHERE u.ID = @id", connection );
cmd.Parameters.AddWithValue( "@id", 45 );

Grüße,
Andre

Loewchen0507 Themenstarter:in
292 Beiträge seit 2006
vor 16 Jahren
Es funktioniert

Hi andre,

entschuldige meine späte Antwort... aber bei dem Wetter hatte war ich dann doch mal "kurz" draußen... 🙂

Danke für Dein Beispiel... es hat funktioniert und ich schreibe meine Abfragen gade alle Stück für Stück um...

vielen vielen Dank für die Hilfe...

LG Loewchen