Von userID auf userName schließen (SQL + WPF)

  • C#

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Von userID auf userName schließen (SQL + WPF)

    "Nicht mehr aktuell"
    Hallo,

    ich verwende folgenden Code um Daten aus einer MySQL Datenbank in eine dataGrid zu laden:

    C#-Quellcode

    1. try
    2. {
    3. connection3.Open();
    4. MySqlCommand cmdSel = new MySqlCommand(sql, connection3);
    5. DataGrid dt = new DataGrid();
    6. MySqlDataAdapter adp = new MySqlDataAdapter(cmdSel);
    7. DataSet ds = new DataSet();
    8. adp.Fill(ds, "LoadDataBinding");
    9. dataGrid1.DataContext = ds;
    10. }
    11. catch (MySqlException ex)
    12. {
    13. MessageBox.Show(ex.ToString());
    14. }
    15. finally
    16. {
    17. connection3.Close();
    18. }


    Nun habe ich eine Spalte "timestamp" in der auch ein Unix-Timestamp enthalten ist. Wie kann ich - in einem Zwischenschritt - diesen Unix-Timestamp in einen dd.mm.yyyy - hh:mm umwandeln? Ich muss da ja irgendwie auf das DataSet zugreifen - aber wie? Eine Funktion um den Timestamp zum dd.mm.yyyy - hh:mm habe ich schon.

    C#-Quellcode

    1. internal static DateTime UnixTimestampToDate(string timestamp)
    2. {
    3. if (timestamp == null || timestamp.Length == 0) return DateTime.MinValue;
    4. return UnixTimestampToDate(long.Parse(timestamp));
    5. }


    Verschoben. ~Trade

    Update


    Siehe Von userID auf userName schließen (SQL + WPF)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Montero“ ()

    ich weiß nicht, wie der unix-Timestamp einen Zeitpunkt codiert. Aber ich könnte es mit Leichtigkeit ergoogeln.
    Und ebenso könntest auch du.
    Also erklär mir, wie ein Unix-Timestamp einen Zeitpunkt codiert, und ich erkläre dir, wie man das als DateTime darstellt.
    Allerdings glaube ich, auch das könntest du selbst.

    ErfinderDesRades schrieb:

    ich weiß nicht, wie der unix-Timestamp einen Zeitpunkt codiert. Aber ich könnte es mit Leichtigkeit ergoogeln.
    Und ebenso könntest auch du.
    Also erklär mir, wie ein Unix-Timestamp einen Zeitpunkt codiert, und ich erkläre dir, wie man das als DateTime darstellt.
    Allerdings glaube ich, auch das könntest du selbst.


    Ich bin verwirrt. Den Timestamp habe ich als String in der Tabelle. Nun möchte ich ihn aber nicht als string ausgeben (1442224857) sondern mit einem Zwischenschritt in das Dataset umgewandelt mit der Funktion (DateTime UnixTimestampToDate(string timestamp)) übergeben. Wieso soll ich dir dann erklären, wie ein Unixtimestamp einen Zeitpunkt codiert?


    /edit: Oder erwartest du von mir die Aussage, dass ein Unixtimestamp die Sekunden ab dem 01.01.1970 00:00 berechnet?
    @ErfinderDesRades
    Hab lange nichts mehr mit MySQL gemacht, aber ich bin der Meinung dass die String-Darstellung in Mysql Standard ist.
    Auch Funktionen wie Now() sind so dokumentiert.

    Der MySQL.Net-Provider macht daraus aber schon irgendwie ein DateTime daraus.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @Montero: nee, ich hab gedacht, Timestamp ist ein eigener Datenbank-Datentyp.
    Den man übrigens vorzugsweise in Multi-User-Systemen nutzt, um Datensätze zeitlich limitiert zu sperren. Einen String (bzw DbType.Text, Varchar oder whatever) würde ich kaum als Timestamp bezeichnen.

    Aber ich kenn mich nicht groß aus - gibts in MySql keinen Timestamp-Datentyp?

    Edit: jetzt nachgeguckt: Klaro gibts den. (Und wenn man ihn benutzt, entfällt auch jede Konvertiererei)

    ErfinderDesRades schrieb:

    gibts in MySql keinen Timestamp-Datentyp
    Doch, als Speicherelement schon.
    dev.mysql.com/doc/refman/5.5/en/date-and-time-types.html
    Aber in der Syntax wird das alles irgendwie in String-Darstellung präsentiert.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @pataod: nach meinen Unterlagen ist MySql.TIMESTAMP mit .Net.System.DateTime assoziiert.
    Diese Info hab ich zu Zeiten mittels mySqlDbConnection.GetSchema() direkt von einer MySql-Datenbank abgerufen.

    @Montero: Ein DateTime kann man addieren, subtrahieren, das Datum abrufen und und und...
    Einfach mal im ObjectBrowser die DateTime-Klasse angucken.
    Das gilt alles natürlich ebenso für DateTime-Einträge, wenn sie in Datasets gespeichert sind - was sollte denn da auch anders sein?
    Ich glaube ihr versteht mein Problem nicht. Die Daten werden durch den MySQL Adapter an das DataSet übergeben und per Fill() reingeladen. Nun möchte ich wissen, wie ich auf die Daten im "adp" zugreifen kann um diese beispielsweise zu verändern. Unabhängig vom DateTime etc. Gehen wir davon aus, ich habe in einer Datenbank Spalte einen Integer, den ich plötzlich *2 rechnen möchte und an das DataSet übergeben möchte. Wie geht das?

    Montero schrieb:

    Ich glaube ihr versteht mein Problem nicht.
    Dann drückst du dich glaub unverständlich aus.
    Was etwa ist mit "adp" gemeint?

    oder das hier:

    Montero schrieb:

    Gehen wir davon aus, ich habe in einer Datenbank Spalte einen Integer, den ich plötzlich *2 rechnen möchte und an das DataSet übergeben möchte. Wie geht das?
    hälst du das für eine gute Idee, ins Dataset 8 einzulesen, wenn in der Datenbank 4 steht?
    Nur so viel: imo ist das keine gute Idee, absolut nicht - denk etwa mal daran, dass auch mal rückgespeichert wird.. 8| .

    Aber vlt. hast du ja Gründe, aber dazu lese ich hier nichts, und - ja - so kann ich dein Problem nicht verstehen.

    ErfinderDesRades schrieb:

    hälst du das für eine gute Idee, ins Dataset 8 einzulesen, wenn in der Datenbank 4 steht?
    Ich erklär mal eben meine Datenbank. Ich habe eine Datenbank, da steht in der Spalte "auftraege" ein Int. auftraege*2400 ergibt dann beispielsweise den Lohn. Also soll im dataGrid der Lohn den man erhält stehen, statt die Anzahl der Aufträge.

    ErfinderDesRades schrieb:

    Was etwa ist mit "adp" gemeint?

    als ​adp habe ich meinen MysqlDataAdapter definiert. Siehe oben.

    Rückgespeichert wird nix, ist nur zur Veranschaulichung der Daten.
    sowas würde man glaub besser mit "berechneten Spalten" lösen. Ein DataAdapter hat zwar ein Event, wo man solche Hacks auch umsetzen könnte, aber wie gesagt: in meinen Augen höchst bedenklich (und halt auch unnötig), wenn was anneres geladen wird, als eiglich drinne ist.
    berechnete Spalten Tut
    (Geht natürlich mit typisiertem Dataset zig-fach einfacher, aber biste halt selber schuld, dass du untypisiert arbeitest )
    Hallo Leute,

    ändern wir mal das Szenario: Ich möchte Daten, welche ich in eine DataGrid Lade ändern. Nun werden in einer Tabelle benutzerbezogene IDs gespeichert, welche auf einen Nutzer schließen lassen.


    Stellt euch die Tabellen wie folgt vor:
    Nutzerlog {
    int id;
    int user_id;
    string log;
    }

    Nutzer {
    int id;
    string username;
    }

    Nun lade ich in mein DataGrid alle daten aus der tabelle Nutzerlog und möchte in der Spalte "Name" den Namen des Nutzers aus Tabelle "Nutzer" string username mit Hilfe der user_id in Tabelle "Nutzerlog" umtauschen.

    Wie kann ich solche Daten an ein DataSet übergeben? Helfen mir das SQL JOINs ?

    Grüße
    ich würd empfehlen, du erlernst erstmal, wie man überhaupt typisierte Datasets bindet, anzeigt, ändert. Das Abspeichern kannst du dabei erstnoch stark vereinfacht lassen, mit Dataset.WriteXml, also ohne Datenbank.
    Ist der Begriff "DataRelation" dir ein Begriff? Der ist nämlich für relatinonales Datenbänkern von fundamentaler bedeutung.
    Also wenn du den noch nicht kennst, solltest du erst noch mit DatasetOnly "üben".

    Viele Übungen findest du hier: vier Views-Videos - die zeigen auch die Eleganz des Ansatzes.
    Aber zum Abspeichern bringt das nix, dazu findest du hier was: Daten laden und speichern

    Achso - ganz allgemein die relationale Grundidee ist auch hier weiter-verlinkt: Datenverarbeitungs-Vorraussetzungen