/// <summary>
        /// 返回 IP地址段
        /// </summary>
        /// <param name="IPUnit">IP地址的元素</param>
        /// <param name="depth">深度 [1-4]</param>
        /// <returns>IP地址段</returns>
        public override List <IPAddressQueryInfo> Parse(byte[] IPUnit, out int depth)
        {
            List <IPAddressQueryInfo> list = new List <IPAddressQueryInfo>();

            IPAddressQueryInfo address = null;

            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);

            SqlCommand cmd = new SqlCommand();

            SqlDataAdapter da = new SqlDataAdapter();

            DataTable table = new DataTable();

            cmd.Connection = conn;

            for (depth = 4; depth > 0; depth--)
            {
                cmd.CommandText = "SELECT [Id],[StartIP],[EndIP],[StartId],[EndId],[Country],[Province],[City],[Language],[Summary] FROM Configuration_IP WHERE startip LIKE '" + ParseWhereClause(depth, IPUnit) + "%'";

                da.SelectCommand = cmd;

                da.Fill(table);

                if (table.Rows.Count > 0)
                {
                    for (int i = 0; i < table.Rows.Count; i++)
                    {
                        address = new IPAddressQueryInfo();

                        address.Id = (table.Rows[i]["Id"] == DBNull.Value) ? 0 : (int)table.Rows[i]["Id"];

                        address.Country = (table.Rows[i]["Country"] == DBNull.Value) ? string.Empty : (string)table.Rows[i]["Country"];

                        address.Province = (table.Rows[i]["Province"] == DBNull.Value) ? string.Empty : (string)table.Rows[i]["Province"];

                        address.City = (table.Rows[i]["City"] == DBNull.Value) ? string.Empty : (string)table.Rows[i]["City"];

                        address.Language = (table.Rows[i]["Language"] == DBNull.Value) ? string.Empty : (string)table.Rows[i]["Language"];

                        address.Summary = (table.Rows[i]["Summary"] == DBNull.Value) ? string.Empty : (string)table.Rows[i]["Summary"];

                        address.StartIP = (table.Rows[i]["StartIP"] == DBNull.Value) ? string.Empty : (string)table.Rows[i]["StartIP"];

                        address.EndIP = (table.Rows[i]["EndIP"] == DBNull.Value) ? string.Empty : (string)table.Rows[i]["EndIP"];

                        Parse(address);

                        list.Add(address);
                    }

                    break;
                }
            }

            return(list);
        }
        /// <summary>
        /// 分析
        /// </summary>
        /// <param name="address"></param>
        private void Parse(IPAddressQueryInfo address)
        {
            //创建表达式
            string pattern;

            bool isUpdate = false;

            Match match;

            pattern = @"(?<province>.*?)省[\s\S]*?(?<city>.*?)市\s";

            if (Regex.IsMatch(address.Country, pattern))
            {
                match = Regex.Match(address.Country, pattern);

                address.Summary = address.Country;

                address.Language = "zh-CN";

                address.Country = "中国";

                address.Province = match.Groups["province"].Value;
                address.City     = match.Groups["city"].Value;

                isUpdate = true;
            }
            else
            {
                pattern = @"(?<city>.*?)市\s";

                if (Regex.IsMatch(address.Country, pattern))
                {
                    match = Regex.Match(address.Country, pattern);

                    address.Summary = address.Country;

                    address.Language = "zh-CN";

                    address.Country = "中国";

                    address.Province = match.Groups["city"].Value;
                    address.City     = match.Groups["city"].Value;

                    isUpdate = true;
                }
            }

            if (isUpdate)
            {
                SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);

                SqlCommand cmd = new SqlCommand();

                SqlParameter param;

                cmd.Connection = conn;

                cmd.CommandText = "UPDATE Configuration_IP SET [Country] = @Country,[Province] = @Province,[City]=@City,[Language]=@Language,[Summary]=@Summary WHERE [Id] = @Id ";

                param       = new SqlParameter("@Id", SqlDbType.Int);
                param.Value = address.Id;
                cmd.Parameters.Add(param);

                param       = new SqlParameter("@Country", SqlDbType.NVarChar);
                param.Value = address.Country;
                cmd.Parameters.Add(param);

                param       = new SqlParameter("@Province", SqlDbType.NVarChar);
                param.Value = address.Province;
                cmd.Parameters.Add(param);

                param       = new SqlParameter("@City", SqlDbType.NVarChar);
                param.Value = address.City;
                cmd.Parameters.Add(param);

                param       = new SqlParameter("@Language", SqlDbType.NVarChar);
                param.Value = address.Language;
                cmd.Parameters.Add(param);

                param       = new SqlParameter("@Summary", SqlDbType.NVarChar);
                param.Value = address.Summary;
                cmd.Parameters.Add(param);

                conn.Open();

                cmd.ExecuteNonQuery();

                conn.Close();
            }
        }