这两天一直在查找数据更新之类的问题,今天正好有机会和大家共享一下.
一、需求
1、在新项目中添加了新的功能模块,而已上线的旧项目中没有此功能模块,需添加进去。
2、已知新项目模块中新增了三张表 TConsumeAccount TConsumeRecBufDSnew TConsumeAccountSum
旧项目中存在表TConsumeRecBufD,需要将表TConsumeRecBufD中的数据同步到新表TConsumeRecBufDSnew 中去,而新旧表的结构是有收支的。
二、开发步调
1、工具运行效果如下:
点击“创建表”给就项目添加三张表。在代码中执行如下sql语句停止创建,在建表之前应先停止是不是已存在判断,只有当不存在才创建表。如下:
if not exists(select * from sysobjects where xtype='u' and name='TConsumeAccountSum')
CREATE TABLE [dbo].[TConsumeAccountSum](...
点击“加载数据”是将旧表中的数据加载到DataGridView中停止展示,同时,因为两张表中的字段类型和数目都有收支,所以这样可以将旧表的数据临时存储到DataGridView中,然后点击更新数据的时候,就可以遍历DataGridView中数据,停止必定的处置之后再将数据写入新表。
点击“更新按钮”,将停止数据同步,即将表TConsumeRecBufDS中的数据导入到新表TConsumeRecBufDSnew中去。由于需要同步的数据可能比较多,所以这里可以在后台开启一个线程并添加一个progressBar控件避免假死情况的涌现。
private void btnUpdate_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(Single));
t.IsBackground = true;
t.Start();
}
点击“查看”,可以查看更新后的新表数据。
关键代码如下:
如果说生命是一座庄严的城堡,如果说生命是一株苍茂的大树,如果说生命是一只飞翔的海鸟。那么,信念就是那穹顶的梁柱,就是那深扎的树根,就是那扇动的翅膀。没有信念,生命的动力便荡然无存;没有信念,生命的美丽便杳然西去。(划线处可以换其他词语)
private void Single()
{
TConsumeRecBufDSnew model = null;
List<TConsumeRecBufDSnew> lists = null;
TConsumeRecBufDSnewDAL tDal = new TConsumeRecBufDSnewDAL();
if (dgv.Rows.Count > 0)
{
lists = new List<TConsumeRecBufDSnew>();
for (int i = 0; i < dgv.Rows.Count; i++)
{
model = new TConsumeRecBufDSnew();
model.PosMac = dgv.Rows[i].Cells["PosMac"].Value.ToString();
if (dgv.Rows[i].Cells["Balance"].Value == null || string.IsNullOrEmpty(dgv.Rows[i].Cells["Balance"].Value.ToString()))
{
model.Balance = decimal.Round(Convert.ToDecimal(dgv.Rows[i].Cells["Balance"].Value), 2);
}
else
{
model.Balance = (decimal)0.00;
}
string str = dgv.Rows[i].Cells["RecordTime"].Value.ToString();
model.RecordTime = Convert.ToDateTime(str);
model.FareCount = Convert.ToInt32(dgv.Rows[i].Cells["FareCount"].Value.ToString());
model.Operator = Convert.ToInt32(dgv.Rows[i].Cells["Operator"].Value.ToString());
model.Mode = dgv.Rows[i].Cells["Mode"].Value.ToString();
model.IsAllowance = dgv.Rows[i].Cells["IsAllowance"].Value.ToString();
model.IsCredit = dgv.Rows[i].Cells["IsCredit"].Value.ToString();
model.IsSuccess = dgv.Rows[i].Cells["IsSuccess"].Value.ToString();
model.IsReturn = dgv.Rows[i].Cells["IsReturn"].Value.ToString();
model.LastPosMac = dgv.Rows[i].Cells["LastPosMac"].Value.ToString();
model.IsReturn = dgv.Rows[i].Cells["IsReturn"].Value.ToString();
model.Fare = decimal.Parse(dgv.Rows[i].Cells["Fare"].Value.ToString());
model.CardID = dgv.Rows[i].Cells["CardID"].Value.ToString(); //
model.RecordID = comm.GetRecordID(dgv.Rows[i].Cells["RecordID"].Value.ToString()); //
model.ID = model.PosMac + model.CardID + comm.GetHexToInt(model.RecordID); //
model.IsChecked = decimal.Zero;
model.IsTrue = decimal.MinusOne;
model.AccountID = Guid.Empty;
if (model.IsSuccess == "刷卡胜利")
{
model.RecordStatus = decimal.One;
}
else
{
model.RecordStatus = decimal.Zero;
}
if (dgv.Rows[i].Cells["UpdateTime"].Value != null && !string.IsNullOrEmpty(dgv.Rows[i].Cells["UpdateTime"].Value.ToString()))
{
model.UpdateTime = Convert.ToDateTime(dgv.Rows[i].Cells["UpdateTime"].Value);
}
lists.Add(model);
}
}
else
{
MessageBox.Show("请先加载数据!");
}
if (lists.Count > 0)
{
Invoke(new MethodInvoker(delegate { progressBar1.Visible = true; })); //在子线程中操纵主线程控件
Invoke(new MethodInvoker(delegate { progressBar1.Maximum = lists.Count; }));
foreach (TConsumeRecBufDSnew t in lists)
{
if (tDal.Exists(t.ID))
{
tDal.Update(t);
}
else
{
tDal.Add(t);
}
Invoke(new MethodInvoker(delegate { progressBar1.Value += 1; }));
}
MessageBox.Show("数据已更新!");
}
else
{
MessageBox.Show("没有要更新的数据!");
}
}
文章结束给大家分享下程序员的一些笑话语录: 某程序员对书法十分感兴趣,退休后决定在这方面有所建树。花重金购买了上等的文房四宝。一日突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风 范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下一行字:hello world.