⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 celldb.cs

📁 用C#实现的取得CellID和LAC的程序源代码!
💻 CS
字号:
using System;
using System.Data;
using System.IO;
using System.Xml;

using NiceTracker.Libraries;

namespace NiceTracker
{
	/// <summary>
	/// Summary description for CellDB.
	/// </summary>
	public class CellDB
	{				
		public const string Filename = "cells.xml";

		private static DataSet dsData = new DataSet( "data" );
		private static DataTable dtCells = null;		
		private static DataTable dtAreas = null;		

		public CellDB()
		{
		}

		public const string CELL_UNKNOWN = "Unknown";
		public const string AREA_UNKNOWN = "Unknown";
		public const string CELL_NO_NAME = "<No name>";
		public const string AREA_NO_NAME = "<No name>";

		public static void Load()
		{			
			string fullFilename = MiscLib.ToFilename( DBPath, Filename );

			 if ( !File.Exists( fullFilename ) )
			{			
				dtCells = setupCellDB( dsData );
				dtAreas = setupAreaDB( dsData );

				dsData.WriteXml( fullFilename );
			}
			else
			{
				dsData.ReadXml( fullFilename );
				
				dtCells = setupCellDB( dsData );				
				dtAreas = setupAreaDB( dsData );
			}			

			// Ensure that relational data is correct
			mergeDataTables();

			// Ensure that defaulted data is present
			setDefaultsInDataTables();
		}

		public static void Save()
		{
			string fullFilename = MiscLib.ToFilename( DBPath, Filename );

			dsData.WriteXml( fullFilename );
		}

		private static DataTable setupCellDB( DataSet ds )
		{
			DataTable dt = null;

			if ( ds.Tables.Contains( "cells" ) )
				dt = ds.Tables[ "cells" ];
			else
			{
				dt = new DataTable( "cells" );
				ds.Tables.Add( dt );
			}

			if ( !dt.Columns.Contains( "description" ) )
				dt.Columns.Add( "description", typeof( string ) );
			if ( !dt.Columns.Contains( "lac" ) )
				dt.Columns.Add( "lac", typeof( string ) );
			if ( !dt.Columns.Contains( "ci" ) )
				dt.Columns.Add( "ci", typeof( string ) );
			if ( !dt.Columns.Contains( "operator" ) )
				dt.Columns.Add( "operator", typeof( string ) );

			return dt;
		}

		private static DataTable setupAreaDB( DataSet ds )
		{
			DataTable dt = null;

			if ( ds.Tables.Contains( "areas" ) )
				dt = ds.Tables[ "areas" ];
			else
			{
				dt = new DataTable( "areas" );
				ds.Tables.Add( dt );
			}			

			if ( !dt.Columns.Contains( "description" ) )
				dt.Columns.Add( "description", typeof( string ) );
			if ( !dt.Columns.Contains( "lac" ) )
				dt.Columns.Add( "lac", typeof( string ) );
			if ( !dt.Columns.Contains( "operator" ) )
				dt.Columns.Add( "operator", typeof( string ) );

			return dt;
		}

		public static bool IsNewCell( string LAC, string CI )
		{			
			DataRow[] rows = dtCells.Select( "lac='" + LAC + "' and ci='" + CI + "'" );
			return ( rows.Length == 0 );
		}
		
		public static bool IsNewArea( string LAC )
		{			
			DataRow[] rows = dtAreas.Select( "lac='" + LAC + "'" );
			return ( rows.Length == 0 );
		}

		public static string GetCellDescription( GSMCell cell )
		{
			return GetCellDescription( cell.LAC, cell.CI );
		}

		public static string GetCellDescription( string LAC, string CI )
		{			
			DataRow[] rows = dtCells.Select( "lac='" + LAC + "' and ci='" + CI + "'" );
			
			if ( rows.Length >= 1 )
				return rows[0]["description"].ToString();
			else
				return CELL_UNKNOWN;
		}
		
		public static string GetAreaDescription( GSMCell cell )
		{
			return GetAreaDescription( cell.LAC, cell.CI );
		}

		public static string GetAreaDescription( string LAC, string CI )
		{			
			DataRow[] rows = dtAreas.Select( "lac='" + LAC + "'" );
			
			if ( rows.Length >= 1 )
				return rows[0]["description"].ToString();
			else
				return AREA_UNKNOWN;
		}

		public static void AddNewCell( string LAC, string CI )
		{
			AddNewCell( LAC, CI, CELL_NO_NAME );
		}
		
		public static void AddNewCell( string LAC, string CI, string description )
		{
			DataRow dr = dtCells.NewRow();
			dr[ "lac" ] = LAC;
			dr[ "ci" ] = CI;
			dr[ "description" ] = description;
			dr[ "operator" ] = CellTrack.OperatorCode;
			dtCells.Rows.Add( dr );
		}

		public static void AddNewArea( string LAC, string description )
		{
			DataRow dr = dtAreas.NewRow();
			dr[ "lac" ] = LAC;			
			dr[ "description" ] = description;
			dr[ "operator" ] = CellTrack.OperatorCode;
			dtAreas.Rows.Add( dr );
		}

		public static void AddNewArea( string LAC )
		{
			AddNewArea( LAC, AREA_NO_NAME );
		}

		public static void ImportCells( XmlDocument xmlDoc )
		{
			foreach ( XmlNode cellNode in xmlDoc.DocumentElement.ChildNodes )
			{
				if ( cellNode.Name == "cells" )
				{
					string oper = "";
					string lac = "";
					string ci = "";
					string description = "";

					foreach ( XmlNode dataNode in cellNode.ChildNodes )
					{
						if ( dataNode.Name == "operator" )
							oper = dataNode.InnerText;
						else if ( dataNode.Name == "lac" )
							lac = dataNode.InnerText;
						else if ( dataNode.Name == "ci" )
							ci = dataNode.InnerText;
						else if ( dataNode.Name == "description" )
							description = dataNode.InnerText;

					}

					if ( oper != "" &&
						lac != "" &&
						ci != "" &&
						description != "" )
					{				
						if ( IsNewCell( lac, ci ) )
							AddNewCell( lac, ci, description );						
					}
				}			
			}
		}

		public static void ImportAreas( XmlDocument xmlDoc )
		{
			foreach ( XmlNode cellNode in xmlDoc.DocumentElement.ChildNodes )
			{
				if ( cellNode.Name == "areas" )
				{
					string oper = "";
					string lac = "";
					string description = "";

					foreach ( XmlNode dataNode in cellNode.ChildNodes )
					{
						if ( dataNode.Name == "operator" )
							oper = dataNode.InnerText;
						else if ( dataNode.Name == "lac" )
							lac = dataNode.InnerText;
						else if ( dataNode.Name == "description" )
							description = dataNode.InnerText;

					}

					if ( oper != "" &&
						lac != "" &&						
						description != "" )
					{				
						if ( IsNewArea( lac ) )
							AddNewArea( lac, description );						
					}
				}			
			}
		}


		private static void mergeDataTables()
		{
			foreach ( DataRow dr in dtCells.Rows )
			{
				string description = dr[ "description" ].ToString();
				string lac = dr[ "lac" ].ToString();

				if ( IsNewArea( lac ) )
				{
					AddNewArea( lac, description );
				}
			}
		}

		private static void setDefaultsInDataTables()
		{
			foreach ( DataRow dr in dtAreas.Rows )
			{
				dr[ "lac" ] = dr[ "lac" ].ToString().Replace( " ", "" );				
				if ( dr[ "operator" ] == DBNull.Value )
					dr[ "operator" ] = CellTrack.OperatorCode;
			}

			foreach ( DataRow dr in dtCells.Rows )
			{
				dr[ "lac" ] = dr[ "lac" ].ToString().Replace( " ", "" );
				dr[ "ci" ] = dr[ "ci" ].ToString().Replace( " ", "" );
				if ( dr[ "operator" ] == DBNull.Value )
					dr[ "operator" ] = CellTrack.OperatorCode;
			}
		}
		

		public static DataTable DTCells
		{
			get
			{
				return dtCells;
			}
		}

		
		public static DataTable DTAreas
		{
			get
			{
				return dtAreas;
			}
		}

		public static string DBPath
		{
			get
			{
				return Config.ConfigManager.DBLocation;
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -