Laden...

[gelöst] Datetime aus DataGridVeiw in MSSQL speichern

Erstellt von Thomas B vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.126 Views
T
Thomas B Themenstarter:in
223 Beiträge seit 2006
vor 8 Jahren
[gelöst] Datetime aus DataGridVeiw in MSSQL speichern

verwendetes Datenbanksystem: MSSQL

Hallo Community,

nach einigen Jahren hat es mich wieder zum Programmieren hingezogen und nun sitze ich seit einigen Stunden vor einem Problem (genauer gesagt, zwei Problemen), bei dem ich nicht weiter komme und hoffe, dass ihr mir helfen könnt.

Was ich vor habe:
Ich habe eine einfache Tabelle in einer MSSQL Datenbank angelegt und lese diese Daten in ein Datagridview zu Ansicht ein (alles über das Visual Studio zusammengeklickt). Das funktioniert auch prima. Ich habe ein weiteres Datagridview, wo ich die Daten bearbeiten und neue Datensätze anlegen kann, auch das klappt einwandfrei.

Des Weiteren lese ich über die ExchangeWebServices E-Mails von einem Exchange Postfach ein und filtere Anhand einer ID im Betreff die gewünschten Mails raus und packe das Datum der Mails mit in das Datagridview. Bis hierhin klappt das auch, aber nun kommt das Problem.

Problem:
Sobald ich die Daten des Datagridview über den Update Befehl speichere, wird die erste Zeile nicht gespeichert, und das Uhrzeit in den anderen Zeilen wird nicht korrekt gespeichert, die Stunden und Minuten werden nicht eingetragen. Ich habe schon Datetime und Smalldatetime probiert, mit dem gleichen Ergebnis. Das Datum speichert er korrekt ab (bis auf die erste Zeile, die nicht aktualisiert wird).
Entferne ich den Update Teil aus dem Code, werden die Daten auch korrekt im Datagridview angezeigt, ansonsten fehlen auch hier die Stunden und Minuten.
Wie bekomme ich die Uhrzeit korrekt abgespeichert und wie bekomme ich die erste Zeile aktualisiert?

Tabelle:


CREATE TABLE [dbo].[data] (
    [Id]             INT           IDENTITY (1, 1) NOT NULL,
    [Customer]       VARCHAR (100) NULL,
    [Mo]             TINYINT       NULL,
    [Di]             TINYINT       NULL,
    [Mi]             TINYINT       NULL,
    [Do]             TINYINT       NULL,
    [Fr]             TINYINT       NULL,
    [Sa]             TINYINT       NULL,
    [So]             TINYINT       NULL,
    [Last_Succeeded] DATETIME      NULL,
    [Last_Failed]    DATETIME      NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

Der Anhang enthält ein Bild der Tabellendaten. Zu sehen ist, dass Zeile 1 kein Datum bekommt, und in Zeile 2 und 3 die Uhrzeit nicht korrekt ist. Bei Zeile 4 fehlt es korrekterweise, da keine E-Mail zu dieser ID gefunden wird.

Gruß,
Thomas

127 Beiträge seit 2015
vor 8 Jahren

Weiß nicht ob es nur mir so geht, aber ein wenig Code wäre hilfreich um zu sehen was du genau wie machst bzw. machen möchtest ...

T
Thomas B Themenstarter:in
223 Beiträge seit 2006
vor 8 Jahren

Hallo Hummigbird,

dann sag mir, wovon du den Code sehen möchtest. 😃
Ich habe die Daten an dieser Stelle im Debugger geprüft (.data):


this.dataTableAdapter.Update(this.backupMonitorData.data);

Der Datentyp wird als Datetime angegeben für die Spalte Last_Succeeded. Der Wert ist z.B. {19.06.2015 21:38:41}.

Gruß,
Thomas

€: Nachtrag
Wenn ich ab Zeile 2 in der Tabelle eine Uhrzeit vorgebe und dann mein Programm ausführe, bekomme ich eine DBConcurrencyException.

127 Beiträge seit 2015
vor 8 Jahren

Na wenn ich dir genau sagen könnte welchen Code dann würde ich dir vermutlich auch schon sagen können wo dein Problem liegt.
Mit anderen Worte, ich kann dir nicht genau sagen welchen Code.
Je mehr du bereitstellen kannst desto höher die Wahrscheinlichkeit das ich einen Einblick in das Problem bekomme und desto eher kann ich dir vielleicht helfen. (Am besten das ganze Projekt.)

Wie schon gesagt, vielleicht bin ich ja der einzige der nicht ganz versteht woher dein Problem kommt und andere können dir ohne Code helfen. (bzw. können dir direkt sagen welchen Code sie sehen müssen) 😉

Grundsätzlich kann ich auf jeden Fall aus deiner Beschreibung heraus nicht feststellen was da schief läuft und deswegen bräuchte ich Code und evtl. auch mal debuggen zu können falls du das nicht selbst schon gemacht hast (was ich hoffen will 😁 ).

5.658 Beiträge seit 2006
vor 8 Jahren

Hi Thomas B,

bekomme ich eine DBConcurrencyException.

Schau mal in die Doku:

Der DataAdapter untersucht die Anzahl der Zeilen, die von der Ausführung der einzelnen Einfüge-, Aktualisierungs- oder Löschvorgänge betroffen sind, und löst diese Ausnahme aus, wenn die Anzahl gleich 0 ist.

Da weiß man doch schonmal, wonach man beim Debuggen schauen muß.

Christian

Weeks of programming can save you hours of planning

T
Thomas B Themenstarter:in
223 Beiträge seit 2006
vor 8 Jahren

Hallo,

ich konnte einige Tage nicht an dem Projekt weiterarbeiten. Ich habe nun die Datasource komplett gelöscht und neu eingebunden und nun speichert er auch die Uhrzeit mit. Bleibt nur noch das Problem mit der ersten Zeile, die nicht gespeichert wird.

Ich hab ja für jede Zeile in der Tabelle eine ID, die bei 1 beginnt. Damit ich nun auf im Datagridview den Eintrag in der Zeile 1 ansteuern kann, muss ich ja auf das Element 0 zugreifen und reduziere die ID also um 1, was ja auch klappt, solange ich die Daten nicht abspeichere. Im Programm werden die Einträge in die richtigen Zeilen geschrieben. Irgendwo ist da noch ein Fehler, aber ich werde den schon noch finden. =)

Gruß,
Thomas

€:
Problem gelöst. Wenn man ein DataGridView benutzt, muss man die Daten nicht im DGV bearbeiten und ändern, sondern direkt in der Datenquelle. Das scheint mir aber ein Bug in .Net zu sein, denn alle Zeilen bis auf die Erste lassen sich so speichern.