2017-10-13 3 views
0

Donc dans mon programme, j'ai deux bases de données. L'un est "CurrentCargo", l'autre est "PastOrders"Comment déplacer une ligne d'une table dans une base de données à une autre?

Ce que je voulais faire est que lorsque la case à cocher dans la table de "CurrentCargo" a été cochée, il faudra prendre les variables dans la ligne et le déplacer dans la table des "PastOrders". Comme le montre l'image ci-dessous: Tick in tick box triggers a movement of row values donc ce que je tapais mon code:

private void CurrentCargoTable_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.ColumnIndex == 9 && e.RowIndex >= 0) 
     { 
      bool Check = Convert.ToBoolean(CurrentCargoTable.Rows[e.RowIndex].Cells[e.ColumnIndex].Value); 

      int Index = 0; 

      int Code; 
      DateTime ImportDate; 
      DateTime ExportDate; 
      string From; 
      string To; 
      string TransportMode; 
      string Supplier; 
      Decimal Cost; 
      bool Payed; 
      bool Delivered; 

      if (Check == true) 
      { 
       Index = CurrentCargoTable.CurrentCell.RowIndex; 

       Code = (int)CurrentCargoTable.Rows[Index].Cells[1].Value; 
       ImportDate = (DateTime)CurrentCargoTable.Rows[Index].Cells[2].Value; 
       ExportDate = (DateTime)CurrentCargoTable.Rows[Index].Cells[3].Value; 
       From = (String)CurrentCargoTable.Rows[Index].Cells[4].Value; 
       To = (String)CurrentCargoTable.Rows[Index].Cells[5].Value; 
       TransportMode = (String)CurrentCargoTable.Rows[Index].Cells[6].Value; 
       Supplier = (String)CurrentCargoTable.Rows[Index].Cells[7].Value; 
       Cost = (Decimal)CurrentCargoTable.Rows[Index].Cells[8].Value; 
       Payed = false; 
       Delivered = false; 


       string sql = string.Format("insert into dataGridView1 (Code, Import_Date, Export_Date, From, To, TransportMode, Supplier, Cost, Payed, Delivered) values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}');", Code, ImportDate, ExportDate, From, To, TransportMode, Supplier, Cost, Payed, Delivered); 
       this.tableTableAdapter1.Insert(sql); 
       this.tableAdapterManager1.UpdateAll(this.pastOrdersDataSet); 
       dataGridView1.Update(); 

Mais il ne fonctionne toujours pas. J'ai essayé d'utiliser une boîte de message pour voir si les variables stockent les bonnes valeurs. Et chacun a la valeur que je voulais. Donc, j'ai un peu le rôle de "lecture", mais je n'ai pas le rôle de "l'écriture".

S'il vous plaît aidez-moi si quelqu'un le sait, merci.

+0

ne fonctionnent pas avec les valeurs de la table. Travailler avec des données sous-jacentes. Si vos données sous-jacentes sont 'Liste ' alors il est simple - 'Db2Prsister.Insert (myList [idx]); Db1Prsister.Delete (myList [idx]); '. Vous avez simplement déplacé l'enregistrement d'un DB à l'autre. Bien sûr, EF aiderait avec la vitesse de développement de ceci –

Répondre

-1

La volonté suivante fonctionnera s'il n'y a pas de données antérieures (peut être que vous devez vérifier cela avant d'exécuter)

string sql = string.Format(@"Select * into CurrentCargo from PastOrders Where 
PastOrders.Code = '{0}'", Code); 
+0

@LignerPoi soyez conscient que vous devrez exécuter une instruction 'DELETE' supplémentaire au cas où vous voudriez également enlever la rangée de' CurrentCargo'. –

+0

Votre code semble fonctionner ... à mi-chemin? ............ les lignes rouges sont sous celles qui ne sont pas dans la chaîne, par exemple ImportDate et ExportDate qui sont dans DateTime. Si j'essaie de le convertir en DateTime en utilisant "Convert.ToDateTime()", il n'y aura plus de lignes rouges. Cependant, lorsque je lance le débogage, il apparaîtra "Une exception de type 'System.FormatException' s'est produite dans mscorlib.dll mais n'a pas été traitée dans le code utilisateur" – LingnerPoi