如何在每次加载表单时停止复制数据库中的数据



我目前正在开发一个系统,其中一个要求是生成库存中可用产品总数的报告。

我一直在使用这个代码来获得数据库表中每个品种的数量总和。

public void ShowData()
{
con = new SqlConnection(@"Data Source=LAPTOP-KA7UGSG3;Initial Catalog=JAPoultry;Integrated Security=True");
con.Open();
da = new SqlDataAdapter("SELECT * FROM Reports", con);
dt = new DataTable();
da.Fill(dt);
dgv_Reports.DataSource = dt;
}
private void frmReports_Load(object sender, EventArgs e)
{
con = new SqlConnection(@"Data Source=LAPTOP-KA7UGSG3;Initial Catalog=JAPoultry;Integrated Security=True");
con.Open();
cmd = new SqlCommand("INSERT INTO Reports (Variety, Quantity) SELECT Variety, SUM(Quantity) FROM Inventory GROUP BY Variety", con);
cmd.ExecuteNonQuery();
ShowData();

}

但我的问题是,每次加载表单时,数据都会重复或不断添加到数据库中。

我不明白你的"报告";桌子如果我是你,我只会在查询中使用ShowData((,就像这个

public void ShowData()
{
con = new SqlConnection(@"Data Source=LAPTOP-KA7UGSG3;Initial Catalog=JAPoultry;Integrated Security=True");
con.Open();
da = new SqlDataAdapter("SELECT Variety, SUM(Quantity) FROM Inventory GROUP BY Variety", con);
dt = new DataTable();
da.Fill(dt);
dgv_Reports.DataSource = dt;
}
private void frmReports_Load(object sender, EventArgs e)
{
ShowData();
}

将INSERT命令移动到一个新的InsertData((方法中,并在需要时调用此方法,而不是每次调用frmReports_Load时调用。

只需使frmReports_Load方法仅运行SELECT Variety, SUM(Quantity) AS Quantity FROM Inventory GROUP BY Variety,并在每次加载表单时直接在屏幕上显示结果(如果需要的话(。

这就是我的意思——你可能只需要在SUM列中添加一个别名,这样它就可以正确地映射到你的网格视图中:

public void ShowData()
{
con = new SqlConnection(@"Data Source=LAPTOP-KA7UGSG3;Initial Catalog=JAPoultry;Integrated Security=True");
con.Open();
da = new SqlDataAdapter("SELECT Variety, SUM(Quantity) AS Quantity FROM Inventory GROUP BY Variety", con);
dt = new DataTable();
da.Fill(dt);
dgv_Reports.DataSource = dt;
}
private void frmReports_Load(object sender, EventArgs e)
{
ShowData();
}

p.S.不清楚为什么要将数据插入另一个表中——除非你需要记录每次有人加载表单的情况?老实说,这似乎不太可能成为一项要求。

最新更新