数据更新WinForm数据归档同步工具

本文详细介绍了如何在新项目中添加功能模块,并将旧项目中的数据无缝同步至新表,包括建表逻辑、数据加载与展示、同步操作及更新流程。此外,分享了一个有趣的技术笑话,展现了程序员的独特幽默。

这两天一直在查找数据更新之类的问题,今天正好有机会和大家共享一下.

    一、需求

    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.

转载于:https://www.cnblogs.com/jiangu66/archive/2013/05/21/3091566.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值