user7217654
user7217654

Reputation:

Data from database displays multiple times

When im trying to view database data after updating something or deleting data, the program shows me that data multiple times. I dont know, it doesnt like refresh or what? i cant seem to find the problem, is it hidden somewhere in the output function?

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();
            }
        }
    }

}

Im working with Access database and C# console application. If there is some text that you need to understand then ask

Upvotes: 0

Views: 43

Answers (1)

Habib
Habib

Reputation: 223282

The reason is that you are adding rows to the same DataTable again and again. You need to clear rows before each select statement. Use 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);
    }

Upvotes: 1

Related Questions