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,

.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
}