// 添加新列 public void AddNewRow(CEntityWaterFlowMap entity) { // 记录超过1000条,或者时间超过1分钟,就将当前的数据写入数据库 m_mutexDataTable.WaitOne(); //等待互斥量 DataRow row = m_tableDataAdded.NewRow(); //row[CN_StationID] = entity.StationID; //row[CN_WaterStage] = entity.WaterStage; //row[CN_WaterFlow] = entity.WaterFlow; row[CN_StationID] = entity.StationID; row[CN_BGTM] = entity.BGTM.ToString(CDBParams.GetInstance().DBDateTimeFormat); row[CN_PTNO] = entity.PTNO; row[CN_ZR] = entity.ZR; row[CN_Q1] = entity.Q1; row[CN_Q2] = entity.Q2; row[CN_Q3] = entity.Q3; row[CN_Q4] = entity.Q4; row[CN_Q5] = entity.Q5; row[CN_Q6] = entity.Q6; row[CN_currQ] = entity.currQ; m_tableDataAdded.Rows.Add(row); if (m_tableDataAdded.Rows.Count >= CDBParams.GetInstance().AddBufferMax) { // 如果超过最大值,写入数据库 Task task = new Task(() => { AddDataToDB(); }); task.Start(); } else { // 没有超过缓存最大值,开启定时器进行检测,多次调用Start()会导致重新计数 m_addTimer.Start(); } m_mutexDataTable.ReleaseMutex(); }
public bool DeleteLine(CEntityWaterFlowMap Entity) { // 删除多行数据 StringBuilder sql = new StringBuilder(); int currentBatchCount = 0; //for (int i = 0; i < Entity.Count; i++) //{ ++currentBatchCount; // sql.AppendFormat("delete from {0} where {1}={2} and {3}='{4}';", sql.AppendFormat("delete from {0} where {1}={2};", CT_TableName, CN_StationID, Entity.StationID //CN_BGTM, Entity.BGTM ); if (currentBatchCount >= CDBParams.GetInstance().UpdateBufferMax) { // 更新数据库 if (!this.ExecuteSQLCommand(sql.ToString())) { return(false); } sql.Clear(); //清除以前的所有命令 currentBatchCount = 0; } //} // end of for // 如何考虑线程同异步 return(ExecuteSQLCommand(sql.ToString())); }
/// <summary> /// 获取更新的和新增的数据记录 /// </summary> /// <param name="listUpdated"></param> /// <param name="listAdded"></param> /// <returns></returns> private bool GetUpdatedData(out List <CEntityWaterFlowMap> listUpdated, out List <CEntityWaterFlowMap> listAdded) { // 标记为删除的就不需要添加的修改或者添加的记录中了 listUpdated = new List <CEntityWaterFlowMap>(); listAdded = new List <CEntityWaterFlowMap>(); try { this.Invoke((Action) delegate { Enabled = false; }); List <int> listEditRows = new List <int>(); foreach (int item in base.m_listEditedRows) { if (!m_listMaskedDeletedRows.Contains(item)) { listEditRows.Add(item); } } // 将去重后的项赋给编辑项 base.m_listEditedRows = listEditRows; for (int i = 0; i < base.m_listEditedRows.Count; ++i) { CEntityWaterFlowMap wfmap = new CEntityWaterFlowMap(); wfmap.StationID = base.Rows[m_listEditedRows[i]].Cells[CS_StationId].Value.ToString(); wfmap.BGTM = DateTime.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_BGTM].Value.ToString()); wfmap.PTNO = int.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_PTNO].Value.ToString()); wfmap.ZR = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_ZR].Value.ToString()); wfmap.Q1 = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_Q1].Value.ToString()); wfmap.Q2 = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_Q2].Value.ToString()); wfmap.Q3 = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_Q3].Value.ToString()); wfmap.Q4 = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_Q4].Value.ToString()); wfmap.Q5 = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_Q5].Value.ToString()); wfmap.Q6 = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_Q6].Value.ToString()); wfmap.currQ = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_currQ].Value.ToString()); // wfmap.StationID = m_strStationId; //使用默认的站点ID //if (wfmap.RecordId == -1) //{ // 添加的新记录 // listAdded.Add(wfmap); //} //else //{ // // 更新以前的记录 listUpdated.Add(wfmap); //} } m_listEditedRows.Clear(); //清空此次记录,标记为所有的都为未修改 return(true); } catch (System.Exception ex) { // 获取失败 Debug.WriteLine(ex.ToString()); return(false); } finally { this.Invoke((Action) delegate { Enabled = true; }); } }
public void DoDelete() { if (this.IsCurrentCellInEditMode) { //MessageBox.Show("请完成当前的编辑"); this.EndEdit(); //return false; } if (base.m_listMaskedDeletedRows.Count <= 0) { MessageBox.Show("没有标记为删除的列,无需删除"); return; } try { // 获取数据 for (int i = 0; i < base.m_listMaskedDeletedRows.Count; ++i) { //// -1表示新添加的用户 //long recordId = long.Parse(base.Rows[m_listMaskedDeletedRows[i]].Cells[CS_StationId].Value.ToString()); string stationid = base.Rows[m_listMaskedDeletedRows[i]].Cells[CS_StationId].Value.ToString(); DateTime bgtm = DateTime.Parse(base.Rows[m_listMaskedDeletedRows[i]].Cells[CS_BGTM].Value.ToString()); int ptno = int.Parse(base.Rows[m_listMaskedDeletedRows[i]].Cells[CS_PTNO].Value.ToString()); CEntityWaterFlowMap tmp = new CEntityWaterFlowMap(); tmp.StationID = stationid; tmp.BGTM = bgtm; tmp.PTNO = ptno; // 并且从编辑项中减去这一行 m_listEditedRows.Remove(m_listMaskedDeletedRows[i]); m_listDeleteByUser.Add(tmp); //if (recordId != -1) //{ // m_listDoDeletedRows.Add(recordId); //} } // 将某些行标记为不可见 for (int i = 0; i < base.m_listMaskedDeletedRows.Count; ++i) { //base.Rows[i].Visible = false; base.DeleteRowData(m_listMaskedDeletedRows[i]); } m_proxyWaterFlowMap.DeleteRange(m_listDeleteByUser); // MessageBox.Show("删除成功!"); } #pragma warning disable CS0168 // 声明了变量“e”,但从未使用过 catch (Exception e) #pragma warning restore CS0168 // 声明了变量“e”,但从未使用过 { MessageBox.Show("删除失败!"); } m_listMaskedDeletedRows.Clear(); //清空 base.UpdateDataToUI(); MessageBox.Show("删除成功!"); }
public List <CEntityWaterFlowMap> QueryMapsByStationId(string stationId) { // 根据站点ID,查询当前站点的水位流量关系 List <CEntityWaterFlowMap> results = new List <CEntityWaterFlowMap>(); string sql = string.Format("select * from {0} where {1} = '{2}' order by BGTM , PTNO", CT_TableName, CN_StationID, stationId); try { SqlDataAdapter adapter = new SqlDataAdapter(sql, CDBManager.GetInstacne().GetConnection()); DataTable dataTableTmp = new DataTable(); adapter.Fill(dataTableTmp); for (int i = 0; i < dataTableTmp.Rows.Count; ++i) { CEntityWaterFlowMap entity = new CEntityWaterFlowMap(); //entity.StationID = dataTableTmp.Rows[i][CN_StationID].ToString().Trim(); //entity.WaterFlow = decimal.Parse(dataTableTmp.Rows[i][CN_WaterFlow].ToString()); //entity.WaterStage = decimal.Parse(dataTableTmp.Rows[i][CN_WaterStage].ToString()); //entity.RecordId = long.Parse(dataTableTmp.Rows[i][CN_RecordID].ToString()); entity.StationID = dataTableTmp.Rows[i][CN_StationID].ToString().Trim(); entity.BGTM = Convert.ToDateTime(dataTableTmp.Rows[i][CN_BGTM].ToString()); entity.PTNO = int.Parse(dataTableTmp.Rows[i][CN_PTNO].ToString()); entity.ZR = Decimal.Parse(dataTableTmp.Rows[i][CN_ZR].ToString()); entity.Q1 = Decimal.Parse(dataTableTmp.Rows[i][CN_Q1].ToString()); entity.Q2 = Decimal.Parse(dataTableTmp.Rows[i][CN_Q2].ToString()); entity.Q3 = Decimal.Parse(dataTableTmp.Rows[i][CN_Q3].ToString()); entity.Q4 = Decimal.Parse(dataTableTmp.Rows[i][CN_Q4].ToString()); entity.Q5 = Decimal.Parse(dataTableTmp.Rows[i][CN_Q5].ToString()); entity.Q6 = Decimal.Parse(dataTableTmp.Rows[i][CN_Q6].ToString()); entity.currQ = Decimal.Parse(dataTableTmp.Rows[i][CN_currQ].ToString()); // entity.RecordId = long.Parse(dataTableTmp.Rows[i][CN_RecordID].ToString()); results.Add(entity); } } catch (Exception ex) { Debug.WriteLine(ex.ToString()); } return(results); }
/// <summary> /// 处理单行数据 /// </summary> /// <param name="str"></param> /// <returns></returns> private bool DealWithLineData(string str, int lineNumber, ref string strErroInfo, ref string stationidstr) { //if (str.StartsWith("(") && str.EndsWith(")")) //{ // 按照逗号分隔每个数值,第一个是站号,第二个是水位,第三个是流量 //str = str.Substring(1, str.Length - 2); string[] results = str.Split(','); if (11 == results.Length) { try { // 刚好11个的话,正好 string stationId = results[0].Trim(); //BGTM DateTime timeTmp = DateTime.Parse(results[1].Trim()); if (lineNumber == 1) { lastTime = timeTmp; CEntityWaterFlowMap entity1 = new CEntityWaterFlowMap(); entity1.StationID = stationId; entity1.BGTM = timeTmp; m_proxyWaterFlowMap.DeleteLine(entity1); stationidstr = stationId; } else { if (lastTime != timeTmp) { strErroInfo = string.Format("行:{0} 时间数据错误", lineNumber); return(false); } if (stationidstr != stationId) { strErroInfo = string.Format("行:{0} 站号不一致", lineNumber); return(false); } } //PTNO int ptno = int.Parse(results[2].Trim()); if (ptno != lineNumber) { strErroInfo = string.Format("行:{0} 点序列数据错误", lineNumber); return(false); } decimal q1 = -1, q2 = -1, q3 = -1, q4 = -1, q5 = -1, q6 = -1; int count = 0; // ZR decimal zr = decimal.Parse(results[3].Trim()); //Q1 if (results[4].Trim() != "") { q1 = decimal.Parse(results[4].Trim()); count++; } if (results[5].Trim() != "") { q2 = decimal.Parse(results[5].Trim()); count++; } //Q3 if (results[6].Trim() != "") { q3 = decimal.Parse(results[6].Trim()); count++; } //Q4 if (results[7].Trim() != "") { q4 = decimal.Parse(results[7].Trim()); count++; } //Q5 if (results[8].Trim() != "") { q5 = decimal.Parse(results[8].Trim()); count++; } //Q6 if (results[9].Trim() != "") { q6 = decimal.Parse(results[9].Trim()); count++; } //CURRQ int currQ = int.Parse(results[10].Trim()); if (currQ > count) { strErroInfo = string.Format("行:{0} 流量数据错误", lineNumber); return(false); } if (lineNumber == 1) { lastCurrQ = currQ; } else { if (lastCurrQ != currQ) { strErroInfo = string.Format("行:{0} 流量数据错误", lineNumber); return(false); } } //Decimal waterStage = Decimal.Parse(results[1]); //Decimal waterFlow = Decimal.Parse(results[2]); if (null == CDBDataMgr.Instance.GetStationById(stationId)) { strErroInfo = string.Format("行:{0} 未知站点\"{2}\"", lineNumber, stationId); return(false); } CEntityWaterFlowMap entity = new CEntityWaterFlowMap(); entity.StationID = stationId; entity.BGTM = timeTmp; entity.PTNO = ptno; entity.ZR = zr; entity.Q1 = q1; entity.Q2 = q2; entity.Q3 = q3; entity.Q4 = q4; entity.Q5 = q5; entity.Q6 = q6; //entity.Q2 = q2; //entity.Q3 = q3; //entity.Q4 = q4; //entity.Q5 = q5; //entity.Q6 = q6; entity.currQ = currQ; m_listImport.Add(entity); //entity.WaterStage = waterStage; //entity.WaterFlow = waterFlow; entity.RecordId = -1; // 写入内存,如果之间不编辑,就直接保存,这个ModifiedData就有用了 if (m_mapModifiedData.ContainsKey(stationId)) { m_mapModifiedData[stationId].listAdded.Add(entity); } else { // 新建一个 CDataGridViewWaterFlowMap.SModifiedData data = new CDataGridViewWaterFlowMap.SModifiedData(); data.listAdded = new List <CEntityWaterFlowMap>(); data.listUpdated = new List <CEntityWaterFlowMap>(); data.listDeleted = new List <long>(); data.listAdded.Add(entity); m_mapModifiedData.Add(stationId, data); } // 写入表格,伪装成点击按钮添加的结果 m_mapStationWaterFlow[stationId].Add(entity); if (m_mapStationDGVStatus.ContainsKey(stationId)) { // 添加到最后一个 m_mapStationDGVStatus[stationId].listEditedRows.Add(m_mapStationWaterFlow[stationId].Count - 1); } else { // 新建一个表格状态 CDataGridViewWaterFlowMap.SStatus status = new CDataGridViewWaterFlowMap.SStatus(); status.listDoDeletes = new List <long>(); status.listEditedRows = new List <int>(); status.listMarkDeleteRows = new List <int>(); status.listEditedRows.Add(m_mapStationWaterFlow[stationId].Count - 1); m_mapStationDGVStatus.Add(stationId, status); } return(true); } catch (System.Exception ex) { Debug.WriteLine(ex.ToString()); strErroInfo = string.Format("行:{0} 数据格式错误", lineNumber); return(false); } } else { strErroInfo = string.Format("行:{0} 数据格式错误", lineNumber); return(false); } //} //else //{ // // 格式不对 // strErroInfo = (string.Format("行:{0} 开始结束符号\"(\"\")\"格式错误", lineNumber)); // return false; //} }