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)
        {
            if (isLoadData == false)
            {
                LoadTableData();
            }
            Thread t = new Thread(new ThreadStart(Single));
            t.IsBackground = true;
            t.Start();
        }

点击“查看”,可以查看更新后的新表数据。
        //查看新表数据
        private void btnLook_Click(object sender, EventArgs e)
        {
            strConn = string.Format("server={0};database={1};uid={2};pwd={3}", txtServerUrl.Text.Trim(), txtDatabase.Text.Trim(), uid, pwd);
            SqlHelper helper = new SqlHelper(strConn);
            string sql = "select * from TConsumeRecBufDSnew";
            dgv.DataSource = helper.GetDataTable(sql,null);
            lblRowNums.Text = dgv.Rows.Count.ToString();
        }

关键代码如下:

       private void Single()
        {
            TConsumeRecBufDSnew model = null;
            List<TConsumeRecBufDSnew> lists = null;
            TConsumeRecBufDSnewDAL tDal = new TConsumeRecBufDSnewDAL();

            if (loadDT.Rows.Count > 0)
            {
                lists = new List<TConsumeRecBufDSnew>();
                Invoke(new MethodInvoker(delegate { progressBar1.Visible = true; }));
                Invoke(new MethodInvoker(delegate { progressBar1.Maximum = loadDT.Rows.Count; }));
                for (int i = 0; i < loadDT.Rows.Count; i++)
                {
                    model = new TConsumeRecBufDSnew();

                    model.PosMac = loadDT.Rows[i]["PosMac"].ToString();
                    if (loadDT.Rows[i]["Balance"] == null || string.IsNullOrEmpty(loadDT.Rows[i]["Balance"].ToString()))
                    {
                        model.Balance = decimal.Round(Convert.ToDecimal(loadDT.Rows[i]["Balance"]), 2);
                    }
                    else
                    {
                        model.Balance = (decimal)0.00;
                    }
                    string str = loadDT.Rows[i]["RecordTime"].ToString();
                    model.RecordTime = Convert.ToDateTime(str);
                    model.FareCount = Convert.ToInt32(loadDT.Rows[i]["FareCount"].ToString());
                    model.Operator = Convert.ToInt32(loadDT.Rows[i]["Operator"].ToString());
                    model.Mode = loadDT.Rows[i]["Mode"].ToString();
                    model.IsAllowance = loadDT.Rows[i]["IsAllowance"].ToString();
                    model.IsCredit = loadDT.Rows[i]["IsCredit"].ToString();
                    model.IsSuccess = loadDT.Rows[i]["IsSuccess"].ToString();
                    model.IsReturn = loadDT.Rows[i]["IsReturn"].ToString();
                    model.LastPosMac = loadDT.Rows[i]["LastPosMac"].ToString();
                    model.IsReturn = loadDT.Rows[i]["IsReturn"].ToString();
                    model.Fare = decimal.Parse(loadDT.Rows[i]["Fare"].ToString());

                    model.CardID = loadDT.Rows[i]["CardID"].ToString(); //
                    model.RecordID = comm.GetRecordID(loadDT.Rows[i]["RecordID"].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 (loadDT.Rows[i]["UpdateTime"] != null && !string.IsNullOrEmpty(loadDT.Rows[i]["UpdateTime"].ToString()))
                    {
                        model.UpdateTime = Convert.ToDateTime(loadDT.Rows[i]["UpdateTime"]);
                    }


                    if (tDal.Exists(model.ID))
                    {
                        tDal.Update(model);
                    }
                    else
                    {
                        tDal.Add(model);
                    }
                    Invoke(new MethodInvoker(delegate { progressBar1.Value += 1; }));

                    //lists.Add(model);
                }
            }
            else
            {
                MessageBox.Show("请先加载数据!");
            }
            MessageBox.Show("数据已更新!");
        }
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邹琼俊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值