我目前正在开发一个系统,其中一个要求是生成库存中可用产品总数的报告。
我一直在使用这个代码来获得数据库表中每个品种的数量总和。
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.不清楚为什么要将数据插入另一个表中——除非你需要记录每次有人加载表单的情况?老实说,这似乎不太可能成为一项要求。