数据库中的数据显示多次

时间:2017-02-15 20:40:35

标签: c# console-application oledb

当我尝试在更新内容或删除数据后查看数据库数据时,程序会多次向我显示该数据。我不知道,它不喜欢刷新或什么?我似乎无法找到问题,它是否隐藏在输出函数的某个地方?

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#控制台应用程序。 如果您需要了解某些文字,请询问

1 个答案:

答案 0 :(得分:1)

原因是您要一次又一次地向同一DataTable添加行。您需要在每个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);
    }