Kann ich die gleiche Function auch in anderem Modul nutzen

Horst1945

Cadet 4th Year
Registriert
Okt. 2014
Beiträge
106
Hallo,

ich muss mein Faktura-Programm von Visual Basic 6.0 auf Visual Basic C# neugestalten. Da für mich C# Neuland ist habe ich eine kleine Frage:

Hier ein Teil meine Source Code im Modul "Stammdaten"

Code:
con.Open();
                var strSQL = "Select KdNr, anrede, Firma, Plz, Ort, Extra, strasse, plz, land, ( ansprech1, ansprech2, vorwahl, telefon1, telefon2, fax, email, web, seit, info) from stammdaten where kdnr = @query";
                DataSet ds = new DataSet();
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = new SqlCommand(strSQL, con);
                adapter.SelectCommand.Parameters.AddWithValue("@query", txtBSuchen.Text);
                adapter.Fill(ds, "Stammdaten");
                counter = ds.Tables[0].Rows.Count;

Kann ich diese Syntax auch im Modul "Artikel ohne die in Klammer gesetzten Felde) schreiben benutzen?

Horst
 
Zuletzt bearbeitet:
Was ist denn "Visual Basic C#"?
Ich weiß nicht genau, was du mit Syntax meinst aber wenn du den Code wiederverwenden willst, kannst du den in eine (static) Methode packen, die dir ein DataSet zurück liefert.
 
Was meinst du mit "Modul"?
Eine Klasse? Oder hast du es in deiner Forms visuell getrennt und nennst es jetzt Modul?

Ich würde die Methode wie darlis schon gesagt hat
1.) static machen und
2.) einen string Parameter übergeben (string kndr)
3.) die Methode nicht in den Codebehind packen sondern in eine neue Klasse z.B. Datenzugriff.cs

Dann kannst du so von allen Modulen aus auf die Metode zurückgreifen:
Code:
Datenzugriff.GetKunden("A12345");

Der Aufruf aus der Form
Code:
Datenzugriff.GetKunden(txbSSuchen.Text);

Klasse müsste so aussehen
Code:
public class Datenzugriff
{
 public static DataSet GetKunden(string kdnr)
{
   using(DbConnection con = new SqlConnection())
{
    var strSQL = "Select KdNr, anrede, Firma, Plz, Ort, Extra, strasse, plz, land, ( ansprech1, ansprech2, vorwahl, telefon1, telefon2, fax, email, web, seit, info) from stammdaten where kdnr = @query";
    DataSet ds = new DataSet();
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.SelectCommand = new SqlCommand(strSQL, con);
    adapter.SelectCommand.Parameters.AddWithValue("@query", kdnr);
    adapter.Fill(ds, "Stammdaten");
    counter = ds.Tables[0].Rows.Count;

return ds;
}
}
}

Sorry wenns nicht auf Anhieb klappt, hab aber kein Visual Studio mit Compiler hier zur Hand ;)
 
Zuletzt bearbeitet: (Hatte den rückgabetyp bei der Methode vergessen: DataSet;)
Sinnvoll wäre eine Unterteilung nach MVVM-Architektur und Service-Orientierter Architektur.

Du hast eine Persistenzschicht, die steuert die Zugriffe auf die Datenbank, d.h. wandelt deine Anfrage in einen SQL-Befehl um und andersrum.
Eine Service-Schicht, die die Logik für die Daten hat, die von den Daos kommt, also Daten zusammenführen oder auswerten etc.
Ein ViewModel, dass die Daten vom Service für die Oberfläche aufbereitet, PropertyChanged-events anbietet und auf Eingaben von der Oberfläche reagiert.
Und letztendlich die View mit nur den Fenstern, welches das ViewModel kennt.

Ich schreib dir gleich noch mal paar Beispiele anhand deiner Codeschnipsel. Bin bloß gerade etwas in Eile.
Ergänzung ()

Also: Du baust die erstmal dein Model auf, dass sind deine Domain-Objekte für deine Stammdaten.

Anhand deiner Datenbankabfrage:

var strSQL = "Select KdNr, anrede, Firma, Plz, Ort, Extra, strasse, plz, land, ( ansprech1, ansprech2, vorwahl, telefon1, telefon2, fax, email, web, seit, info) from stammdaten where kdnr = @query";

brauchst du erstmal eine Klasse, da es sich vermutlich um Kunden handelt, nennen wir es erstmal Customer.

Das hat als Properties: KdNr, anrede, Firma, Plz, Ort, Extra, strasse, plz, land

Jetzt baust du dir in dein CustomerDao (Persistenzschicht) eine Methode namens FindCustomersByCustomerNumber(string customerNumber). Die liefert dir eine IList<Customer> zurück.
Wobei ich auch bei dir in deiner Abfrage ein count sehe, brauchst du nur die Menge der Kunden, die dieser Kundennummer entsprechen?

Eine Instanz von diesem Dao bekommt dein CustomerService, wenn hier keine Logik ist, dann leitet der die Anfrage einfach weiter.

Dein ViewModel bekommt wiederrum eine Instanz vom Service. Ich nehm jetzt mal an, dass du WPF für die Oberfläche nutzt. Falls nicht, müsstest du noch mal mitteilen, wie du die Daten ausgibst.
 
Zuletzt bearbeitet:
Dir ist bewusst, dass du gerade jemandem der danach gefragt hat wie man eine Methode erstellt, MVVM erklären wolltest?
 
Nein, ich hab ihm eine sinnvolle Struktur für sein Programm erklärt. Und er kommt ja von VB, da gibts auch Methoden, das wird er wohl kennen...
 

Ähnliche Themen

Zurück
Oben