2016-09-09 6 views
0

Mein Problem ist, dass:Aktualisieren Sie die erste Zeile in einer Datenbank C# mysql

  1. ich eine Zeile aus der Datenbank auswählen möchten, die Daten in Ablauf (die, die arrangieren sollte, die noch nicht abgelaufen sind und Ich will es nicht einschränken). Die Elemente, die das aktuelle Datum überschritten haben, müssen in Ruhe gelassen werden. Und mit dem gleichen ITEMID sagen wir I00001.

  2. Dann nach der Auswahl Ich möchte die erste Zeile der Datenbank aktualisieren. Wenn die Menge 0 erreicht, wird die nächste Zeile aktualisiert und so weiter.

Hier ist mein Beispiel

  • Hier ist die aktuelle Datenbank screenshot.
  • Ich möchte die itemid wählen where = I00001 und 50.
  • Dann abziehen es wie this
  • Dann arrangieren Ich möchte auf der Grundlage der Ablauf aussehen sollte, wie ich oben erwähnt.
  • Wählen Sie die erste Zeile aus.
  • Ziehen Sie die 50 von der Menge ab. (wie ich oben schon erwähnte).

Hier ist mein Code:

for (int i = 0; i < dataGridView.Rows.Count; i++) 
{ 
    cmd = new MySqlCommand(@"SELECT * FROM inventory2 WHERE itemid = @itemid ORDER BY expiry ", sqlconnection); 

    cmd = new MySqlCommand(@"UPDATE inventory2 SET quantity = @quantity WHERE itemid = @itemid ORDER BY expiry)", sqlconnection); 

    sqlconnection.Open(); 
    cmd.ExecuteNonQuery(); 
    sqlconnection.Close(); 
} 

Ich bin offen für einen anderen Vorschlag dies zu tun. Ich hoffe du verstehst mein Problem. Vielen Dank. Es tut mir leid, dass ich keinen weiteren Screenshot senden kann.

+0

ich alles über SQL ohne C# -Code tun würde. Aber es ist 4 Uhr morgens und ich bin dran. Werde es morgen anschauen – Drew

+0

oh es ist ok danke. – Philip

Antwort

1

die Sie interessieren,

void UpdateQuantity() { 
     // your connection string 
     MySqlDataAdapter adp = new MySqlDataAdapter("Select * from table where ItemID = " + 13 + " Order BY expiry", cnn); // I have test db and I used it 
     DataTable dt = new DataTable(); 
     adp.Fill(dt); 
     int deductNum = 50; 
     foreach (DataRow item in dt.Rows) 
     { 
      int value = (int)item["quantity"]; 
      if (value >= deductNum) // if had enough stock we don't need to pass the next line 
      { 
       int result = value - deductNum; 
       item["quantity"] = result.ToString(); 
       break; // so need to exit from loop 
      } 
      else 
      { 
       deductNum -= value; // else we deduct value count from deduction 
       item["quantity"] = 0; // quantity finished so it will be 0 
      } 
     } 
     MySqlCommandBuilder cmb = new MySqlCommandBuilder(adp); 
     adp.UpdateCommand = cmb.GetUpdateCommand(); 
     adp.Update(dt); 
     dataGridView1.DataSource = dt; //to show the result 
    } 

enter image description here (können Sie berechnen :))

Hoffnung hilft,

+0

Danke. Ich schulde dir eine – Philip

+0

@Philip Ihre Begrüßung. – Berkay

+0

Hallo! Ich habe eine Chance, Ihren Code zu testen, aber es zeigt einen Fehler an. "Zusätzliche Informationen: Angegebener Cast ist nicht gültig." In int Wert = Convert.ToInt32 ((int) Element ["Menge"]) ;. Danke :) – Philip

Verwandte Themen