Laden...

char ' im string bei DataRow Select Suche

Erstellt von Kentarion vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.466 Views
K
Kentarion Themenstarter:in
29 Beiträge seit 2006
vor 17 Jahren
char ' im string bei DataRow Select Suche

Hier mal der Code:


while((line = FileHandler.getNextLine()) != null)
{
char[] strpkt = ";".ToCharArray();
string[] strg = line.Split(strpkt);
string fid = strg[0];
string nachname = strg[1];
string email = strg[2];
string telnr = strg[3];

DataRow[] darray = dsPV.ds.Tables["All"].Select("ID="+fid +" AND Nachname = '"+nachname+"'");

...

danach wird dann die suche ausgewertet.

Wenn ich nun in einem Nachnamen den char ' verwende bricht er mir genau an dem punkt ab und wirft einen fehler (nachfolgender operator nicht gefunden etc.).

nun hab ich versucht den nachnamen halt zu modifizieren und einen escape char davorzusetzen...

nur erkennt dieser Select anscheinend kein \ als escape char oder es muss irgendwie anders gemacht werden.

aus dem was bei msn steht werd ich auch nicht wirklich schlau.

hatte schonmal jemand ein ähnliches problem?

ich denke das nächste ist das @ das mir auch die suche kaputt macht...

gibts den keine möglich kein bei einer Suche mit zB: "Name = 'xyz<?99''"&lt;>m@mn' " was auch immer hier auch genau diesen wert zu finden?

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
Du kannst den ' escapen, indem Du ihn verdoppelst
also
WHERE name like 'ein''Test'
findet dann den Wert "ein'Test".
Achte aber darauf daß es 2 einzelne ' seuin müssen, nicht der "

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

K
Kentarion Themenstarter:in
29 Beiträge seit 2006
vor 17 Jahren

nö, das bringt nix.

3.170 Beiträge seit 2006
vor 17 Jahren

Welche Datenbank benutzt Du denn? Der doppelte ' funktioniert auf jeden Fall bei MS SQL-Server.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

4.221 Beiträge seit 2005
vor 17 Jahren

Original von Kentarion
nö, das bringt nix.

Doch die Verdoppelung bringt was wenn man's richtig codiert




			DataTable dt=new DataTable();
			dt.Columns.Add("Col");

			dt.Rows.Add(new object[]{"Meier"});
			dt.Rows.Add(new object[]{"D'Angelo"});
			dt.Rows.Add(new object[]{"Müller"});


			string strSearch="D'Angelo";

			//Verdoppeln
			strSearch=strSearch.Replace("'","''");

			DataRow[] rows=dt.Select(string.Format("Col='{0}'",strSearch));
			foreach (DataRow rw in rows)
			{
				System.Diagnostics.Debug.WriteLine(string.Format("Gefunden: {0}",rw["Col"]));
			}



Ausgabe:
Gefunden: D'Angelo

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

K
Kentarion Themenstarter:in
29 Beiträge seit 2006
vor 17 Jahren

kommando zurück, es hat funktioniert - ich hab bei der befüll/ersetzfunktion dann einen kleinen fehler gehabt.

vielen dank!

K
Kentarion Themenstarter:in
29 Beiträge seit 2006
vor 17 Jahren

oh wieso einfach wenns kompliziert geht....


			char[] hochstr = "'".ToCharArray();
			string[] nstrg = nachname.Split(hochstr);
			nachname = null;

			nachname = nstrg[0];
			for (int i=1; nstrg.Length > i; i++)
			{
				nachname += "''" + nstrg[i];

			}

danke programmierhans - jetzt bin ich wieder um ein stückchen schlauer --> replace...