Autor Beitrag
mention
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 03.05.10 11:19 
Hallo,

ich habe ein Problem einen Update durchzuführen nachdem ich datagrid eine Zelle geändert habe und das Row_changed event eintritt.

Folgendes ist noch dazu zu sagen das Datagrid bezieht seine DAten aus einer Datatable.
Der Datatable wurde nicht mit einer einfachen select anweisung befüllt sonder durch mehrfachen join, deswegen kann ich den dataadapter + commandbuilder ja nicht benutzen.
Was ich versuche ist einfach die geänderten daten in einen weiteren datatable zu laden diesen dann mittels einer schleife durchlaufe und die werte der geänderten row in einme hashtable speichere.
das hashtable übergebe ich dann einer methode die den table update durchführen soll.
Leider tut sich nach ausführung des queries schlichtweg garnix, auch keine exception oder irgend ein anderer hinweis kommt?
Nun weiss ich das ms Access und sql zumindestens bei join abfragen ne extra sql syntax verlangt, bei dem update query habe ich glaube aber eine korrekte syntax gewählt.
Kann mir jemand helfen?

hier ist mein code:

private void Row_Changed(object sender, DataRowChangeEventArgs e)
{



//Änderungen am grid bzw. dem tblCustomerBuchungen gehen in extra tbl
this.tblEditedCustomerBuchungen = tblCustomerBuchungen.GetChanges();

int rowCount = tblEditedCustomerBuchungen.Rows.Count;
int colCount = tblEditedCustomerBuchungen.Columns.Count;


for (int i = 0;i<rowCount ;i++ ) {
paramCBuchungen["datum"] = tblEditedCustomerBuchungen.Rows[i]["datum"];
paramCBuchungen["von"] = tblEditedCustomerBuchungen.Rows[i]["von"];
paramCBuchungen["bis"] = tblEditedCustomerBuchungen.Rows[i]["bis"];
paramCBuchungen["flz"] = tblEditedCustomerBuchungen.Rows[i]["Flugzeugbezeichnung"];
paramCBuchungen["idMieter"] = tblEditedCustomerBuchungen.Rows[i]["idMieter"];

}

DateTime date = (DateTime)paramCBuchungen["datum"];
paramCBuchungen["datum"] = date.Date.ToShortDateString();

//MessageBox.Show(paramCBuchungen["von"].ToString()+" "+ paramCBuchungen["bis"].ToString() + " //"+paramCBuchungen["datum"].ToString() + " " +paramCBuchungen["flz"].ToString() + " " + //paramCBuchungen["idMieter"].ToString());


buchungsAdapt.updateCustomerBuchungen(paramCBuchungen);

}



public void updateCustomerBuchungen(Hashtable paramCBuchungen)
{

MessageBox.Show(paramCBuchungen["idMieter"].ToString());
string sflz = (string)paramCBuchungen["flz"];
Int32 iFlz;

//Ermittlung der idFlugzeug über die Flugzeugbezeichnung
switch (sflz)
{
case "Motorflugzeug Anna": iFlz = 1; break;
case "Motorflugzeug Berta": iFlz = 2; break;
case "Motorflugzeug Cesar": iFlz = 3; break;
case "Motorflugzeug Dora": iFlz = 4; break;
case "Motorsegelflugzeug Emil": iFlz = 5; break;
case "Motorsegelflugzeug Fred": iFlz = 6; break;
case "Motorsegelflugzeug Goran": iFlz = 7; break;
case "Segelflugzeug Helge": iFlz = 8; break;
case "Segelflugzeug Igor": iFlz = 9; break;
default: iFlz = 1; break;
}

string sql = "UPDATE buchungen SET datum = @datum, von = @von, bis = @bis, idFlugzeug = @idFlugzeug WHERE idMieter = @idMieter";

OleDbConnection dbLink = new OleDbConnection(this._connectionString);
OleDbCommand cmd = new OleDbCommand(sql, dbLink);


cmd.Parameters.Add("@idMieter", OleDbType.Integer, 4).Value = paramCBuchungen["idMieter"];
cmd.Parameters.Add("@idFlugzeug", OleDbType.Integer, 4).Value = iFlz;
cmd.Parameters.Add("@von", OleDbType.Integer, 4).Value = paramCBuchungen["von"];
cmd.Parameters.Add("@bis", OleDbType.Integer, 4).Value = paramCBuchungen["bis"];
cmd.Parameters.Add("@datum", OleDbType.DBDate, 8).Value = paramCBuchungen["datum"];

dbLink.Open();

cmd.ExecuteNonQuery();


dbLink.Close();
//todo: wenn update erfolgreich dann message ausgeben sowie tblMieter und tblBuchungen clearen
//und neu aus der db beladen

}


Zuletzt bearbeitet von mention am Mo 03.05.10 12:05, insgesamt 4-mal bearbeitet
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 03.05.10 11:38 
Hallo und :welcome:

Erstens: Code ist als solcher zu markieren (vor allem bei soviel Code ist das sonst völlig unübersichtlich). Gehe auf deinen ersten Beitrag mit dem Schere-Button, "Bereiche" öffnen, in der ComboBox C# auswählen, Code-Bereich markieren, Plus-Button drücken, "Vorschau" benutzen, ggf. Einrückungen nachbessern. Erst wenn die Vorschau sauber ist, dann "Absenden".

Zweitens: Wenn du schon wegen JOINs manuell speichern musst, dann nimm doch wenigstens eine passende DataTable, in die die Änderungen eingetragen werden. Dann sparst du dir das ständige Hin- und Herkopieren und Konvertieren über paramCBuchungen.

Drittens: Oledb benutzt '?' statt Namen bei den Parametern und achtet auf die Reihenfolge.

Mehr Problemstellen suche ich erst, wenn ich den Text vernünftig lesen kann. Jürgen

Bitte nochmal versuchen! Im Text muss es so aussehen:
[cs]using System;[/cs]
Und in der Vorschau:
ausblenden C#-Quelltext
1:
using System;					
mention Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 03.05.10 12:13 
user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Hallo und :welcome:

Erstens: Code ist als solcher zu markieren (vor allem bei soviel Code ist das sonst völlig unübersichtlich). Gehe auf deinen ersten Beitrag mit dem Schere-Button, "Bereiche" öffnen, in der ComboBox C# auswählen, Code-Bereich markieren, Plus-Button drücken, "Vorschau" benutzen, ggf. Einrückungen nachbessern. Erst wenn die Vorschau sauber ist, dann "Absenden".


Also Nachdem ich den Scherebutton zum Editieren gewählt habe, habe zwar ein paar Comboboxen gefunden in denen konnte ich jedoch nur die .net version auswählten oder aber das Teilforum für die Suche?
Wo soll diese Combobox sein?

Zitat:

Zweitens: Wenn du schon wegen JOINs manuell speichern musst, dann nimm doch wenigstens eine passende DataTable, in die die Änderungen eingetragen werden. Dann sparst du dir das ständige Hin- und Herkopieren und Konvertieren über paramCBuchungen.

Ich habe mir doch mit tbl.getchanges() alle Änderungen in einen weiteren Table gespeicher?

Zitat:

Drittens: Oledb benutzt '?' statt Namen bei den Parametern und achtet auf die Reihenfolge.

Und wie sollte diese syntax dann konkret aussehen?


Mehr Problemstellen suche ich erst, wenn ich den Text vernünftig lesen kann. Jürgen[/quote]


Hallo Jürgen
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 03.05.10 12:22 
user profile iconmention hat folgendes geschrieben Zum zitierten Posting springen:
Also Nachdem ich den Scherebutton zum Editieren gewählt habe, habe zwar ein paar Comboboxen gefunden in denen konnte ich jedoch nur die .net version auswählten oder aber das Teilforum für die Suche?
Wo soll diese Combobox sein?

JüTho hat folgendes geschrieben:
"Bereiche" öffnen

Aber du kannst (wie ich inzwischen geschrieben habe) auch manuell mit [cs]anweisung[/cs] machen.

user profile iconmention hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe mir doch mit tbl.getchanges() alle Änderungen in einen weiteren Table gespeicher?

Das gehört zu den Dingen, die ich nicht gesehen habe. Aber ich meinte eine Tabelle, deren Spalten einer DB-Tabelle entsprechen (vor allem von den Datentypen her).

user profile iconmention hat folgendes geschrieben Zum zitierten Posting springen:
Und wie sollte diese syntax dann konkret aussehen?

ausblenden C#-Quelltext
1:
string sql = "UPDATE buchungen SET datum = ?, von = ?, bis = ?, idFlugzeug = ? WHERE idMieter = ?";					


Jürgen