Hallo,
ich habe 4 Felder in denen man etwas eintragen kann.
Nun will ich einen Suchalgorithmus schreiben.
Wenn in Feld 1 etwas eingetragen wurde, aber in 2, 3 und 4 nicht, suche nach 1.
Wenn in Feld 2 etwas eingetragen wurde, aber in 1, 3 und 4 nicht, suche nach 2.
Wenn in Feld 1 und Feld 2 etwas eingetragen wurde, aber in 3 und 4 nicht, suche nach 1 und 2.
usw.
habe mir hier 14 Möglichkeiten zurechtgebastelt, die alle Eventuallitäten abfängt.
Ist so eine "Suchmachine" schon irgendwo vorhanden oder muss ich mir das selbst schreiben?
mfg
alex
sicher das du nur 14 möglichkeiten hast?
ich würde nämlich sagen du hast vergessen, dass auch in keinen feld was stehen kann oder das in allen feldern was steht.
außerdem verstehe ich nicht was du machen willst.
ja klar, die 2 möglichkeiten habe ich vergessen! 🙂
erklärung:
ich habe vier dropdownlisten, bei denen man was auswählen kann.
je nach auswahl, soll er mir eine xml-datei durchsuchen und das ergebnis anzeigen.
und wozu brauchst du 4 listen?
soll es denn so sein, dass wenn in mehreren dropdownlisten was steht er nacheinander nach den begriffen suchen soll, oder liege ich da falsch?
achso und die Möglichkeiten kriegt man immer mit n2 raus (42 = 16)
nicht nacheinander, sonder gleichzeitig
<user>
<hersteller>Mercedes</hersteller>
<land>Deutschland</land>
<ort>Kölleda</ort>
<gruppe>DaimlerChrysler</gruppe>
<typ1 />
<typ2 />
<typ3 />
<typ4 />
<typ5 />
<adresse />
<telefon_fax />
<werksbezeichnung />
</user>
in den 4 listen kann man hersteller, land, ort und gruppe auswählen.
je nachdem was ausgewählt wurde, soll er das ergebnis anzeigen.
wenn in hersteller und ort was steht, dann soll er nach dem datensatz suchen und ihn dann anzeigen.
wenn in land und gruppe was steht, dann....
Hallo Alex,
die "Suchmaschine" heisst SQL und kann das was Du willst :
string sqlstr = "select * from datei where ";
if (textBox1.Text =! "") sqlstr += " wert1 = '" + textBox1.Text + "' and ";
if (textBox2.Text =! "") sqlstr += " wert2 = '" + textBox2.Text + "' and ";
if (textBox3.Text =! "") sqlstr += " wert3 = '" + textBox3.Text + "' and ";
if (textBox4.Text =! "") sqlstr += " wert4 = '" + textBox4.Text + "' and ";
if (textBox1.Text+textBox2.Text+textBox3.Text+textBox4.Text == "")
sqlstr = "select * from datei";
else
sqlstr = sqlstr.SubString(0,sqlstr.Length-5);
...
Ich würde noch eine Sortierung nach dem Suchwert einbauen.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
So was ist doch nicht schwer.
public void Search(string a, string b, string c, string d)
{
// Nehmen wir mal an das der Defaultwert bei SelectedIndex[0] string.Empty ist
if(!IsNullOrEmpty(a))
{
// Mach was mit a
}
// ... usw dann auf xml loslassen
}
Jörg
habe ja keine sql-datenbank, sondern eine xml-datei.
und wird da nicht gemeckert, wenn nur in textbox1 was steht und der abfragestring als letztes wort das "and" hat?
select * from datei where wert1="Dänemark" and
aber ich denke mal das wäre kein problem das ohne "and" zu schreiben.
aber wie gesagt ist eben eine xml-datei.
@jörg
ja da hätte ich ja meine 16 Möglichkeiten und dementsprechend auch meine
16 Suchalgorithmen.
ich dachte mir nur ob es auch etwas kürzer geht 🙂
mfg
alex
Original von alex309
ja da hätte ich ja meine 16 Möglichkeiten und dementsprechend auch meine
16 Suchalgorithmen.
ich dachte mir nur ob es auch etwas kürzer geht 🙂
Es sind nur 4 !
/**********************
AUS DEM BAUCH UNTESTED
\***********************/
public void Search(string a, string b, string c, string d)
{
// Nehmen wir mal an das der Defaultwert bei SelectedIndex[0] string.Empty ist
StringBuilder MeineSuche = new StringBuilder();
MeineSuche.Append ("/user/[");
bool Added = false;
if(!IsNullOrEmpty(a))
{
MeineSuche.AppendFormat("Hersteller ='{0}', a);
Added = true;
}
if(!IsNullOrEmpty(b))
{
if(Added)
MeineSuche.Append(" AND ");
MeineSuche.AppendFormat("ort ='{0}', b);
Added = true;
}
// Den Rest machst Du schon
MeineSuche.Append("]");
XmlDocument doc = new XmlDocument();
XmlTextReader reader = new XmlTextReader("c:\\dein.xml");
reader.Read();
doc.Load(reader);
//XPath
XmlNodeList NodeList = doc.SelectNodes(MeineSuche.ToString())
StringBuilder Builder = new StringBuilder();
Builder.Append("<OUTPUT>");
foreach (XmlNode node in NodeList)
{
Builder.Append(node.OuterXml);
}
Builder.Append("</OUTPUT>");
// Rest machst Du schon
}
Gruß Jörg
Alex : Mit "sqlstr = sqlstr.SubString(0,sqlstr.Length-5);" schneide ich das letzte "and" ab.
Raffiniert nicht ?
😉
XML eventuell in eine Dataset einlesen und dann mit dort mit SQL selektieren.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
@bernd
habe es bemerkt! 🙂
@jörg
ok, dass muss ich mir dann doch genauer anschauen 😉
ich mach mal meine Version fertig und werde mich dann deinem code wittmen.
ich gebe bescheid, wenn ich beide durchhabe.
danke für eure hilfe
mfg
alex
Original von BerndFfm
string sqlstr = "select * from datei where "; if (textBox1.Text =! "") sqlstr += " wert1 = '" + [B]textBox1.Text [/B]+ "' and "; if (textBox2.Text =! "") sqlstr += " wert2 = '" + textBox2.Text + "' and "; if (textBox3.Text =! "") sqlstr += " wert3 = '" + textBox3.Text + "' and "; if (textBox4.Text =! "") sqlstr += " wert4 = '" + textBox4.Text + "' and "; if (textBox1.Text+textBox2.Text+textBox3.Text+textBox4.Text == "") sqlstr = "select * from datei"; else sqlstr = sqlstr.SubString(0,sqlstr.Length-5); ...
@Bernd das riecht aber nach SQL Injection
textBox1.Text = " ' DELETE TABELLE -- "
Nur mal so am Rande
Jörg
das würde aber bei diesem beispiel nicht funktionieren, da ich eine dropdownliste benutze und da nichts reinschreiben kann.
mfg
alex
Hallo Jörg,
ja, das stimmt. Es ist besser mit Argumenten zu arbeiten oder so einige Zeichen rauszufiltern. Mir ging es eher ums Prinzip.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Hallo Bernd,
ums Prinzip ging es mir auch, denn wenn ich z.B. Software teste ist es das erste was ich mache 🙂
Und wenn Du z.B. Projektmitarbeitern, Praktikanten, Azubis
diese Vorgehensweise zeigst und die sich das aneignen - dann muss man jedesmal den SecuritySheriff spielen.
Von daher halte ich es für angebracht immer SecureCode zu zeigen, gerade weil sich auch hier im Forum Newbies aufhalten.
Gruß Jörg
Würde mich ehrlich gesagt wundern, wenn man mit dem Select Befehl vom DataSet eine Tabelle löschen könnte 😉
e.f.q.
Aus Falschem folgt Beliebiges
Original von Traumzauberbaum
Würde mich ehrlich gesagt wundern, wenn man mit dem Select Befehl vom DataSet eine Tabelle löschen könnte 😉
Dann wundere Dich mal und schreibe Dir doch mal ne einfache Form oder Page
und schreibe da mal im Init oder wo Du willst das hier rein.
// Wir löschen jetzt mal die Tabelle und nicht die Daten der Tabelle
// und wir verwenden nicht master.xp_cmdshell womit wir ja noch mehr anstellen
// könnten z.b. Einen Share anlegen net tralala
// Alles natürlich vorausgesetzt wir haben die dementsprechenden Rechte am SQL-Server
// Für [Tabelle1] kannst Du ja mal Eure KundendatenTabelle nehmen
// Für den Catalog=Killit nimmst Du dann Eure Produktivdatenbank
// Erstelle besser ne TestDb :)
string sql = "Select * from [Tabelle1] where Username = '' DROP TABLE [Tabelle1] --";
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=DeineDatenbank;Initial Catalog=Killit;Integrated Security=True";
SqlDataAdapter da = new SqlDataAdapter(sql,conn);
DataSet ds = new DataSet();
da.Fill(ds,"User");
Happy Coding
Jörg
ich denke doch, dass er nicht eine Datenbank meinte sondern ein DataSet
ist wohl ein missverständniss 🙂
Gut, Bernd sprach von Datenbank, daher mein Hinweis auf SQLInjection
Das Thema heist denn in deinem Beispiel, also wenn es keine DropDowns wären,
XmlInjection die auch einiges erlaubt 🙂
Aber das wäre glaube ich mal einen Artikel wert.
Happy Coding
Jörg