Laden...

SQL: Parameter, der Hochkomma enthält korrekt übergeben

Erstellt von Mustermann vor 14 Jahren Letzter Beitrag vor 14 Jahren 8.377 Views
M
Mustermann Themenstarter:in
3 Beiträge seit 2010
vor 14 Jahren
SQL: Parameter, der Hochkomma enthält korrekt übergeben

Hallo Forum.
Ich habe ein Problem. Ich möchte mit dem SQL-Befehl nach einem teil des Textes suchen, der einen oder mehrere Hochkommata beinhält. Wie zum Beispiel OS'Microsoft. Dies wird aber nicht gemacht. Ich dachte mir man könte das mit string.Replace machen und die zweite Überladung nehmen für character dann müsste das so aussehen StringVariablenname.Replace(''','''); und das nimmt er aber nicht an. Kann mir jemand sagen was man da machen könnte? oder gibts eine andere Möglichkeit nach einem Text zu suchen, der Hochkommata beinhält?
Danke

H
114 Beiträge seit 2007
vor 14 Jahren

Hallo Mustermann!

Statt die SQL-Kommandos via Stringverkettungen zusammenzusetzen, solltest du dir mal folgenden Artikel anschauen [Artikelserie] Parameter von SQL Befehlen

Der sollte dein Problem lösen!

Grtz

H
222 Beiträge seit 2010
vor 14 Jahren

moin,

probiere es doch mal mit

string v = A_Ausstattung_Bez.Replace("'", "''");

mfg hurby

Die Welt hat genug für jedermanns Bedürfnisse, aber nicht für jedermanns Gier.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Mustermann,

vergiss String.Replace und beachte den Hinweis von HiGHteK.

herbivore

M
Mustermann Themenstarter:in
3 Beiträge seit 2010
vor 14 Jahren

Hurby, das macht der Code nich mit

H
222 Beiträge seit 2010
vor 14 Jahren

wie, er macht daqs nicht mit? Replace hat doch eine überladung die 2 Strings annimmt. was bekommst du denn für einen fehler?

mfg hurby

Die Welt hat genug für jedermanns Bedürfnisse, aber nicht für jedermanns Gier.

M
Mustermann Themenstarter:in
3 Beiträge seit 2010
vor 14 Jahren

Als text habe ich 'm'a geschrieben und daraus sollte das gemacht werden
'm'a und das macht er nicht und schreibt mir SQL-Syntax Fehler

49 Beiträge seit 2010
vor 14 Jahren

Hallo zusammen,

wie herbivore und hightek schon sagten ist es eigentlich besser wenn man "richtige" SQL Parameter verwendet.

Wenn es aber unbedingt String-Stückelei sein muss, solltet ihr euch den Abschnitt über Escape Sequenzen in Strings auf string (C#-Referenz) durchlesen.

VG

Single Malt

H
222 Beiträge seit 2010
vor 14 Jahren

wenn ich in sqlstrings ein hochkomma habe dann schreibe ich einfach nocheins rein also '' (kein anführungszeichen!) und dann klappts auch...

halt so wie ich es weiter oben schon schrieb:

string v = A_Ausstattung_Bez.Replace("'", "''");

aus eins macht zwei...

mfg hurby

Die Welt hat genug für jedermanns Bedürfnisse, aber nicht für jedermanns Gier.

49 Beiträge seit 2010
vor 14 Jahren

hallo Hurby,

und wenn du Parameter Benutzt, brauchst du garkeins.

sqlCommand.Parameters.AddWithValue("Parametername", "ParameterWert");

Aus eins macht keins 😁

VG

Single Malt

D
211 Beiträge seit 2006
vor 14 Jahren

Hi,

AddWithValue sollte man aber wenns geht vermeiden, weil dort kein konkreter Datentyp für den Parameter verwendet wird (afaik alles object).
Daher kann bspw. der SqlServer keinen vernünftigen und wiederverwendbaren Executionplan erstellen.

Wie es genau bei MySql aussieht weiß ich nicht, im MS SqlServer Umfeld würde ich davon abraten.

Gruß

DevHB

H
222 Beiträge seit 2010
vor 14 Jahren

hallo Single Malt,

dass geht natürlich auch 😃

ich schreib mir meistens funktionen und übergebe denen dann generierte sqlstrings:


        public Int32 dbExecuteNonQuery(String strSQL)
        {
            SqlConnection Connection = dbConnection();
            if(Connection != null)
            {
                SqlCommand Command = new SqlCommand(strSQL, Connection);
                Int32 affectedRows = Command.ExecuteNonQuery();
                Connection.Close();
                return affectedRows;
            }
            else
                return 0;
        }

von daher weiss ich ja in der funktion wo ich ein SqlCommand habe nicht was die abfrage beinhaltet...

mfg hurby

Die Welt hat genug für jedermanns Bedürfnisse, aber nicht für jedermanns Gier.

49 Beiträge seit 2010
vor 14 Jahren

Hi,

AddWithValue sollte man aber wenns geht vermeiden, weil dort kein konkreter Datentyp für den Parameter verwendet wird (afaik alles object).
Daher kann bspw. der SqlServer keinen vernünftigen und wiederverwendbaren Executionplan erstellen.

Wie es genau bei MySql aussieht weiß ich nicht, im MS SqlServer Umfeld würde ich davon abraten.

Das ist wohl richtig. Ich verwende auch nie AddWithValue.
Ich wollte darauf hinaus, das man ohne diese Frickelei Stringparameter übergeben kann. Meine übliche Vorgehensweise ist:

                
SqlParameter sqlParam = new SqlParameter("ParamName", System.Data.SqlDbType.VarChar);
sqlParam.Value = "Value";
sqlCommand.Parameters.Add(sqlParam);

@Hurby

übergib doch einfach den SqlString mit den Parametern und ein SqlParameter-Array als zweiten Parameter deiner Funktion

49 Beiträge seit 2010
vor 14 Jahren

Nach ein paar Sekunden Suche, bin ich auch noch auf diesen Artikel hier im Board gestoßen.

Artikelserie SQL-Befehle: auch bei Formatproblemen sicher durch Parameters
👍

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Single Malt,

der Link auf die Artikelserie wurde schon in der ersten Antwort gepostet. 😃

herbivore

H
222 Beiträge seit 2010
vor 14 Jahren

hallo single malt,

dass ist natürlich auch ne möglichkeit. ich denke mal das jeder so seine methoden hat, die mit sicherheit verschiedene vor- und nachteile haben...

wenn ich mal wieder mit SQL rumfummel, probiere ich mal deine technik 😉

mfg hurby

Die Welt hat genug für jedermanns Bedürfnisse, aber nicht für jedermanns Gier.

49 Beiträge seit 2010
vor 14 Jahren

der Link auf die Artikelserie wurde schon in der ersten Antwort gepostet. 🙂

Wie blind man doch sein kann. 😁

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Hurby,

dass ist natürlich auch ne möglichkeit.

nein, SqlParameter sind die Möglichkeit. Die Diskussion hier ist überflüssig und störend. Der Artikel wurde geschrieben, um die Best Practice aufzuzeigen und damit gerade solche unnötigen langen Threads über den besten Weg zu vermeiden. Jetzt wird der Artikel schon ganz als erstes gepostet und trotzdem geht die Diskussion los. Wie gesagt, das ist unnötig.

herbivore