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