2017-02-15 6 views
0

何かを更新したりデータを削除したりしてデータベースのデータを表示しようとすると、そのデータが複数回表示されます。私は知らない、それはリフレッシュや何のようなdoesntですか?私は問題を見つけることができない、それは出力関数のどこかに隠されていますか?データベースからのデータが複数回表示される

namespace ConsoleApplication3 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DataTable dt = new DataTable(); 
      dt.Columns.Add(new DataColumn("ID", typeof(int))); 
      dt.Columns.Add(new DataColumn("Vards", typeof(string))); 
      dt.Columns.Add(new DataColumn("Uzvards", typeof(string))); 

      string ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=dbs.accdb"; 
      OleDbConnection con = new OleDbConnection(ConnectionString); 
      int izvele; 
      do 
      { 
       Console.WriteLine("1 - Apskatīt tabulas datus"); 
       Console.WriteLine("2 - Labot tabulas datus"); 
       Console.WriteLine("3 - Dzēst tabulas datus"); 
       izvele = int.Parse(Console.ReadLine()); 
       switch (izvele) 
       { 
        case 1: 
         OleDbCommand cmd = new OleDbCommand("SELECT * FROM PERSONA", con); 
         con.Open(); 
         OleDbDataReader dataReader = cmd.ExecuteReader(); 
         while (dataReader.Read()) 
         { 
          DataRow dr = dt.NewRow(); 
          dr["ID"] = dataReader["ID"]; 
          dr["Vards"] = dataReader["Vards"]; 
          dr["Uzvards"] = dataReader["Uzvards"]; 
          dt.Rows.Add(dr); 
         } 
         con.Close(); 
         dt.AcceptChanges(); 
         PrintDataTable(dt); 
         break; 
        case 2: 
         OleDbCommand upCmd = new OleDbCommand("UPDATE PERSONA SET Vards =?, Uzvards =? WHERE ID =? ", con); 


         Console.Write("Ievadiet jauno vārdu: "); 
         string jaunaisVards = Console.ReadLine(); 
         upCmd.Parameters.Add(new OleDbParameter("@Vards", jaunaisVards)); 
         Console.Write("Ievadiet jauno uzvārdu: "); 
         string jaunaisUzvards = Console.ReadLine(); 
         upCmd.Parameters.Add(new OleDbParameter("@Uzvards", jaunaisUzvards)); 

         Console.Write("Kuru lauku vēlaties labot? "); 
         int lauksID2 = int.Parse(Console.ReadLine()); 
         upCmd.Parameters.Add(new OleDbParameter("@ID", lauksID2)); 
         Console.Write("Vai tiešām vēlaties dzēst šo ierakstu?"); 
         string atbilde2 = Console.ReadLine(); 

         if (atbilde2 == "y") 
         { 
          con.Open(); 
          upCmd.ExecuteNonQuery(); 
          con.Close(); 

         } 
         else if (atbilde2 == "n") 
         { 
          Console.WriteLine("Ieraksts netika labots"); 
          break; 
         } 



         break; 

        case 3: 
         OleDbCommand dCmd = new OleDbCommand("DELETE FROM PERSONA WHERE ID=?", con); 

         Console.Write("Kuru lauku vēlaties dzēst? "); 
         int lauksID = int.Parse(Console.ReadLine()); 
         dCmd.Parameters.Add(new OleDbParameter("@ID", lauksID)); 

         Console.Write("Vai tiešām vēlaties dzēst šo ierakstu?"); 
         string atbilde = Console.ReadLine(); 
         if (atbilde == "y") 
         { 
          con.Open(); 
          dCmd.ExecuteNonQuery(); 
          con.Close(); 
         } 
         else if (atbilde == "n") 
         { 
          Console.WriteLine("Ieraksts netika dzēsts"); 
          break; 
         } 

         break; 

        default: 
         break; 
       } 

      } while (izvele != 0); 


     } 
     static void PrintDataTable(DataTable dt) 
     { 
      foreach (DataColumn dc in dt.Columns) 
      { 
       Console.Write(dc.ColumnName + "\t"); 
      } 
      Console.WriteLine(); 
      Console.WriteLine(); 
      foreach (DataRow dr in dt.Rows) 
      { 
       for (int i = 0; i < dr.ItemArray.Length; i++) 
       { 
        Console.Write(dr[i] + "\t"); 
       } 
       Console.WriteLine(); 
      } 
     } 
    } 

} 

私はAccessデータベースとC#コンソールアプリケーションで作業しています。 あなたが理解する必要があるテキストがある場合は、

+0

を使用して、私はあなたのコードを内訳思います。 – frenchie

+0

これを覚えておいてください。 –

答えて

1

同じ番号に同じ行を何度も追加しているという理由があります。各selectステートメントの前に行をクリアする必要があります。それぞれのケースではなく、同じ関数内のコードの多くを有していると、別の関数を呼び出すようにするだけのスタイルのためにdt.Clear();

con.Open(); 
    OleDbDataReader dataReader = cmd.ExecuteReader(); 
    dt.Clear();//HERE 
    while (dataReader.Read()) 
    { 
     DataRow dr = dt.NewRow(); 
     dr["ID"] = dataReader["ID"]; 
     dr["Vards"] = dataReader["Vards"]; 
     dr["Uzvards"] = dataReader["Uzvards"]; 
     dt.Rows.Add(dr); 
    } 
+1

オハイオ州、オハイオ州、今それは正しく動作します、ありがとうございます。 –

関連する問題