C# Letzten Datensatz im Datatable lesen

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    C# Letzten Datensatz im Datatable lesen

    Hallo,

    vorab schon mal bitte nicht sauer sein auf meine Fragen.
    Normal bin ich in VB.Net tätig.
    Nun versuch ich mich mit C#. Mit vielen Dingen geht es schon.
    Auch gute Lektüre ist vorhanden. Leider nicht alles beschrieben.

    z.B stelle ich in VB so die letzte Nummer in einer Spalte fest.

    'dt = DataTable
    x.. = dt.Rows(dt.Rows.Count-1).Item("Nr")

    Nun hatte ich versucht den Satzaufbau in C# zu übernehmen.
    Hm... das geht nicht
    Wie sollte der Datensatz in C# aussehen.

    Gruß George
    Danke,
    das mit den Klammern war neu. Vestanden.
    Allerdings gibt es jetzt Probleme mit .Item

    Folgende Meldung kommt..
    "DataRow" enthält keine Definition für "Item", und es konnte keine Item-Erweiterungmethode gefunden werden,
    die ein erstes Argument vom Typ "DataRow" akzeptiert (möglicherweise fehlt eine using-Direktive oder ein
    Assemblyverweis.

    Die dt (DataTable) wird aber richtig aufgebaut, ist vorhanden und lesbar.
    "DataRow" habe ich nicht im Quellencode. Evtl. da das Problem.
    In VB war "DataRow" nicht notwendig.

    Wo ist mein Denkfehler?

    Gruß George

    George schrieb:

    Folgende Meldung kommt..
    Hier wäre Dein entsprechender Code zur Fehlerfindung hilfreich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ok, hier der Quellencode...

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Text;
    7. using System.Linq;
    8. using System.Threading.Tasks;
    9. using System.Windows.Forms;
    10. using DevExpress.XtraEditors;
    11. using System.Data.OleDb;
    12. namespace BPS_STA
    13. {
    14. public partial class KundenAnlegen : DevExpress.XtraEditors.XtraForm
    15. {
    16. private DataTable dt;
    17. //private readonly string _;
    18. public KundenAnlegen()
    19. {
    20. InitializeComponent();
    21. }
    22. public KundenAnlegen (string gart):this()
    23. {
    24. lblNameKomplett.Text = gart;
    25. }
    26. private void KundenAnlegen_Load(object sender, EventArgs e)
    27. {
    28. long x=0;
    29. NaechsteKundennummer(ref x);
    30. }
    31. private void NaechsteKundennummer(ref long x)
    32. {
    33. dt = new DataTable();
    34. OleDbConnection con = new OleDbConnection();
    35. OleDbCommand cmd = new OleDbCommand();
    36. con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = C:\\BPSAD\\WAR\\BPSKA.mmm";
    37. cmd.Connection = con;
    38. cmd.CommandText = "SELECT Nr FROM tblSTA_Kunden ORDER By Nr ";
    39. con.Open();
    40. dt.Load(cmd.ExecuteReader());
    41. con.Close();
    42. //letzte Nummer in der dt feststellen
    43. long l;
    44. //l = dt.Rows[dt.Rows.Count - 1].Item["Nr"]; <-- das ist die Problemzeile, jetzt hier auskommentiert
    45. }
    46. }
    47. }


    CodeTags eingefügt ~EaranMaleasi

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „EaranMaleasi“ ()

    @George Jou, das ist C# etwas anders als VB.NET.
    Dein Problem ist, dass die Zeile über den Index und die Spalte über den Namen angesprochen wird.
    Würdest Du die Spalte auch über den Index ansprechen, wäre die Lösung diese:

    C#-Quellcode

    1. l = dt.Rows[dt.Rows.Count - 1][42];
    Such mal unter DataRow, Zugriff auf Spalte über ihren Namen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ok, Item weglassen. Das habe ich jetzt auch verstanden.
    Danke für den Hinweis.
    Den Quellencode hatte ich vom anderen Rechner mit dem MS-Editor übernommen.
    Deshalb der unvorteilhafter Aufbau hier.
    Mir ist noch nicht klar, wie ich vom anderen Rechner den Quellencode
    hier übergeben kann ohne Velust des einrückens der Zeilen.

    Gruß George
    Danke dir für die Berichtigung.
    Sieht natürlich besser aus.

    Nun mal die nächste Frage, die mir meine Fachlektüre nicht beantwortet konnte.
    In VB.Net habe ich mehrere Formen und dazu einige Module.
    War sehr praktisch. Geht in C nun leider auch nicht.

    1) Gibt es da Alternativen?

    und gleich die zweite Frage.
    Ich arbeite in VB.Net prima mit INI-Dateien.
    Auch das ist nun nicht mehr möglich.

    2) Gibt es da auch Alternativen?

    und die dritte Frage.

    3) Welchen Vorteil habe ich bei C gegenüber VB.Net.


    Gruß George

    George schrieb:

    War sehr praktisch. Geht in C nun leider auch nicht.
    Ich gehe mal davon aus, dass Du C# meinst.
    Doch, da geht das alles auch, aber etwas anders.
    Zu den Dialogen gugst Du hier. Ist zwar VB.NET, aber die Philosophie ist dieselbe: Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    Nimm statt eines Moduls eine static class, sollte das genau das sein, was Du meinst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ok, static class werde ich mir mal anschauen.
    Mit VB.net arbeite ich schon. Da geht es schon.
    Mir geht es eigentlich um die Dinge, die man in C#
    nicht so umsetzen kann.
    Deshalb auch die Frage 2 und nicht zuletzt die Frage 3.
    Bei der Frage 2 zu den INI's habe ich in VB.Net irgendwo
    so ein Quellencode gefunden der wunderbar die Werte in
    der INI neu anlegen, verändern uns löschen kann. Das quasi so
    in Hauptgruppen und Nebengruppen eingebettet.
    Deshalb vllt. nochmal die Frage. Gibt es da soetwas ähnliches oder
    wie wird das Problem in c# gelöst.

    Gruß George

    George schrieb:

    Mir geht es eigentlich um die Dinge, die man in C# nicht so umsetzen kann.
    Das ist die falsche Herangehensweise.
    In VB.NET gibt es leider diesen Ranz VisualBasic-Namespace, in dem wird .NET so verbogen, dass VB6-Code (partiell) unterstützt wird.
    Was genau ist das Problem?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    George schrieb:

    Bei der Frage 2 zu den INI's habe ich in VB.Net irgendwo
    so ein Quellencode gefunden

    Warum übersetzt du den Quellcode nicht einfach in C#?

    Ich denke ja das C# eher mehr Features bietet als VB...

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor
    @George Was genau ist das Problem?
    INI ist out. Heute werdfen Daten in XML-Dateien abgelegt.
    Serialisierbare Datenklasse und feddich.
    Spoiler anzeigen

    C#-Quellcode

    1. using System.IO;
    2. using System.Xml.Serialization;
    3. namespace WindowsFormsApplication1
    4. {
    5. /// <summary>
    6. /// Klasse, die die Settings hält, speichert und lädt
    7. /// </summary>
    8. public class Settings
    9. {
    10. /// <summary>Settings-Member</summary>
    11. public int Port { get; set; }
    12. /// <summary>Settings-Member</summary>
    13. public string User { get; set; }
    14. public Settings()
    15. {
    16. // zur Serialisierung
    17. }
    18. /// <summary>
    19. /// Speichern der Settings als XML-Datei
    20. /// </summary>
    21. /// <param name="path">Pfad der XML-Datei</param>
    22. public void WriteSettings(string path)
    23. {
    24. // Serialize object to a XML file.
    25. using (StreamWriter sw = new StreamWriter(path))
    26. {
    27. XmlSerializer x = new XmlSerializer(this.GetType());
    28. x.Serialize(sw, this);
    29. }
    30. }
    31. /// <summary>
    32. /// Laden der Kamera-Settings
    33. /// </summary>
    34. /// <param name="path">Pfad der XML-Datei</param>
    35. /// <returns>die geladenen Settings</returns>
    36. public static Settings ReadSettings(string path)
    37. {
    38. Settings settings = new Settings();
    39. try
    40. {
    41. // Deserialize text file to a new object.
    42. using (StreamReader sr = new StreamReader(path))
    43. {
    44. XmlSerializer x = new XmlSerializer(settings.GetType());
    45. settings = (Settings)x.Deserialize(sr);
    46. }
    47. }
    48. catch
    49. {
    50. // nix tun, die Settings-Instanz ist nicht valid,
    51. // es werden die Default-Werte zurückgegeben
    52. }
    53. return settings;
    54. }
    55. }
    56. }

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hm... ganz so einfach ist es sicherlich nicht.
    Ok, leider keine INI's mehr. Ist mir nicht einleuchtend warum MS das macht.
    Einen Text-INI ist doch einfacher mit einem Texteditor lesbar und bearbeitbar.
    Nun ja, wie auch immer.
    Umwandeln aller vorhandenen INI's in XML-Datein ist viel Arbeit.
    So wie es aussieht wird es leider nötig sein.

    Mal schauen was mir die Lektüre in Sachen XML bietet.

    Gruß George

    George schrieb:

    Ich arbeite in VB.Net prima mit INI-Dateien.
    Auch das ist nun nicht mehr möglich.
    Wie schon gesagt wurde, INI files sind absolut nicht mehr zeitgemäß.
    Dass sie nicht mehr verwendet werden können ist aber auch nicht wahr.
    Da gibt es genügend Möglichkeiten.
    stackoverflow.com/questions/21…ading-writing-an-ini-file
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @George Wenn Du nicht weißt, wonach Du suchen musst, ist die Suchfunktion im Forum leider nicht optimal.
    IniLib - 08.11.2011
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!