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