public List <CEntityStationMap> QueryAll() { var result = new List <CEntityStationMap>(); var sqlConn = CDBManager.GetInstacne().GetConnection(); try { m_mutexWriteToDB.WaitOne(); // 取对数据库的唯一访问权 m_mutexDataTable.WaitOne(); // 获取内存表的访问权 sqlConn.Open(); // 建立数据库连接 String sqlStr = GetQuerySQL(); SqlCommand sqlCmd = new SqlCommand(sqlStr, sqlConn); SqlDataReader reader = sqlCmd.ExecuteReader(); Debug.Assert(reader.FieldCount == CN_FIELD_COUNT, CT_TableName + "表与类" + CT_EntityName + "中定义字段不符合"); // 处理查询结果 while (reader.Read()) { try { var stationMap = new CEntityStationMap(); stationMap.StationID = reader[CN_StationID].ToString(); stationMap.StationID = reader[CN_StationID].ToString(); stationMap.StationID = reader[CN_StationID].ToString(); stationMap.StationID = reader[CN_StationID].ToString(); result.Add(stationMap); } catch (Exception exp) { Debug.WriteLine(exp.Message); } } } catch (Exception exp) { throw exp; } finally { sqlConn.Close(); // 关闭数据库连接 m_mutexDataTable.ReleaseMutex(); // 释放内存表的访问权 m_mutexWriteToDB.ReleaseMutex(); // 释放数据库的访问权 } return(result); }
/// <summary> /// 增加一行数据到站点映射表 /// </summary> /// <param name="entity"></param> public void AddNewRow(CEntityStationMap entity) { m_mutexDataTable.WaitOne(); //等待互斥量 DataRow row = m_tableDataAdded.NewRow(); row[CN_StationID] = entity.StationID; row[CN_StationIDRef] = entity.StationIDRef; row[CN_StationID8] = entity.StationID8; row[CN_StationID10] = entity.StationID10; m_tableDataAdded.Rows.Add(row); if (m_tableDataAdded.Rows.Count >= 1) { // 如果超过最大值,写入数据库 Task task = new Task(() => { AddDataToDB(); }); task.Start(); } else { // 没有超过缓存最大值,开启定时器进行检测,多次调用Start()会导致重新计数 m_addTimer.Start(); } m_mutexDataTable.ReleaseMutex(); }