WinForm資料歸檔同步工具

來源:互聯網
上載者:User

一、需求

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("資料已更新!");        }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.