Laden...

Überprüfen ob Eingegebener Wert schon in der DB existiert?

Erstellt von Nurci vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.116 Views
N
Nurci Themenstarter:in
20 Beiträge seit 2013
vor 10 Jahren
Überprüfen ob Eingegebener Wert schon in der DB existiert?

Hallo,
ich habe eine Textbox in die ich einen Projektname eingeben kann. Während der Eingabe soll geprüft werden ob dieser Name bereits in der DB existiert, falls ja soll die Beschreibung übernommen werden.

Bisher habe ich:

 public bool isExisting(string table, string field, string value)
        {
            int result = 0;
            //        Create connection here
            SqlConnection con = ParentWindow.DBConnection;
            SqlCommand thisCommand = ParentWindow.DBConnection.CreateCommand();
            string s = "SELECT Bezeichnung FROM  Projekt WHERE Bezeichnung= '"+ProjektName.Text+ "' ";
            //how to add parameters
           
            thisCommand.Parameters.AddWithValue("value", value);
            result = (int)thisCommand.ExecuteScalar();
            if (result <= 0)
                return false;
            else
                return true;
        }

wäre für eure Hilfe sehr Dankbar

5.941 Beiträge seit 2005
vor 10 Jahren

Hallo Nurci

Und was ist deine Frage?

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

N
Nurci Themenstarter:in
20 Beiträge seit 2013
vor 10 Jahren

😃

wie wende ich die Methode auf die Eingabe in die Textbox ein? Also während ich den Namen eingebe, soll geprüft werden ob dieser Name schon existiert

also ich hab eine Click-Method zum speichern eines neuen Projekts,

private void projektAnlegen(object sender, RoutedEventArgs e)
        {        
                SqlConnection con = ParentWindow.DBConnection;
            
            if (Projektbeschreibung.Text.Length > 0 && ProjektName.Text.Length > 0)
            {

                string insertProjekt = @"insert into Projekt
                               (Beschreibung, Bezeichnung) OUTPUT INSERTED.ID
                               Values('" + Projektbeschreibung.Text + "','" + ProjektName.Text + "')";

                SqlCommand scmd = new SqlCommand(insertProjekt, con);
                //in DB einfügen und generierte ID auslesen
                int newprojektid = (int) scmd.ExecuteScalar();

                MessageBox.Show("Ein Projekt angelegt");
                
                ProjektName.Text = string.Empty;
                Projektbeschreibung.Text = string.Empty;
                ParentWindow.mainContentControl.Content = new Taetigkeiten(ParentWindow, newprojektid);
                
            }
            else
            {
                MessageBox.Show("Bitte Projektnamen und Beschreibung eingeben");
               
            }
        }

dort müsst ich beim Speichern die Überprüfung machen

C
2.121 Beiträge seit 2010
vor 10 Jahren

wie wende ich die Methode auf die Eingabe in die Textbox ein?

Indem du sie aufrufst?

Dein Code sieht allerdings noch ziemlich buggy aus.
Du solltest Parameter verwenden statt Strings direkt ins SQL zu schreiben.

isExisting ist kompletter Murks, wenn ich das direkt sagen darf.
Den Methodenparameter table nutzt du nirgends. Mit value erstellst du einen SqlParameter der aber auch nirgends verwendet wird.
Du gibst aus dem SQL "Bezeichnung" zurück und castest das dann als int. BUMM!
Und letztendlich macht es nicht viel Sinn eine Bezeichnung zurückzugeben die gleich einem schon im voraus bekannten Wert ist. Sollte das ein COUNT(*) sein statt der Bezeichnung?

N
Nurci Themenstarter:in
20 Beiträge seit 2013
vor 10 Jahren

Danke für deine Antwort CHilic,

du hast Recht, die Methode ist echt Murks.

Ich habe das Problem so gelöst:

 thisCommand.CommandText = @"SELECT Beschreibung FROM Projekt WHERE Bezeichnung  =  @ProjektName ";
                thisCommand.Parameters.AddWithValue("ProjektName", ProjektName.Text);

                SqlDataReader thisReader = thisCommand.ExecuteReader();
                if (thisReader.Read())
                {
                    Projektbeschreibung.Text = (string)thisReader["Beschreibung"];
                    MessageBox.Show("Projektname ist bereits in Verwendung");
                }
                else
                ....

Aber so soll ich das nicht lösen, da ProjektName ein Unique ist, und ich die Fehlermeldung aus der DB ausgeben lassen soll. Jetzt darf ich erst mal wieder googlen, da ich vorher fast nie was mit DB gemacht hab, geschweigeden einen Query geschrieben 😃

Danke

16.835 Beiträge seit 2008
vor 10 Jahren

Schau Dir Repositories an und fang nicht damit an, dass Du DB-Abfragen in die GUI-Logik einbaust. Das ist ein absolutes NoGo und ein fataler Fehler aus Architektursicht.
Kapsel die DB Abfrage ab; Kapsel die Logik und die UI.
Vielleicht solltest Du Dir auch noch mal MVVM mit WPF genauer anschauen, denn das was Du machst ist alles andre als gut wartbar und modular.

N
Nurci Themenstarter:in
20 Beiträge seit 2013
vor 10 Jahren

Problem durch SQLException-Klasse gelöst

N
Nurci Themenstarter:in
20 Beiträge seit 2013
vor 10 Jahren

Ich darf leider kein MVVM benutzen, was ich sehr gern getan hätte

5.658 Beiträge seit 2006
vor 10 Jahren

Hi Nurci,

Ich darf leider kein MVVM benutzen, was ich sehr gern getan hätte

Das mußt du mal näher erklären! Wer sollte denn soetwas verbieten und warum? Wie sollte man sonst vernünftige Anwendungen mit WPF entwickeln?

Christian

Weeks of programming can save you hours of planning

742 Beiträge seit 2005
vor 10 Jahren

Hi Nurci,

Ich darf leider kein MVVM benutzen, was ich sehr gern getan hätte

Das mußt du mal näher erklären! Wer sollte denn soetwas verbieten und warum? Wie sollte man sonst vernünftige Anwendungen mit WPF entwickeln?

Christian

Die Naivität der glücklichen, die nur in normalen Firmen gearbeitet haben. 😉

F
10.010 Beiträge seit 2004
vor 10 Jahren

Nein, die Naivität derjenigen die bei solchen Vorgaben dann Frickeln statt die Architektur dann anders zu nennen.

N
Nurci Themenstarter:in
20 Beiträge seit 2013
vor 10 Jahren

Danke an alle
Ich habe das Problem mit SQLException Klasse gelöst 😃