编程时老是会遇到一些可笑的事情。刚做的一个公网IP->内网IP的映射的维护,本来应该建立一张表来实现这种对应关系的可是我这却没有,而是将它们用一个字符串来表示,写在了web.config文件中。这就出现了不少问题,我读出来的IP映射是一个字符串,要在页面的grid中显示就麻烦了。
先看看config文件:
<connectionStrings>
<add name="ServerAddress" connectionString="12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231;12.12.12.12:1212,123.123.123.123:1231"/>
</connectionStrings>
再看看要实现的效果:
///获得所有的serveradress,以List形式返回
/// </summary>
public List<AdressClass> getAllServerAdress()
{
AdressClass adrClass;
List<AdressClass> adressList = new List<AdressClass>();
//读取web.config文件中的ServerAdress,以string类型返回
string allIpStr = ConfigurationManager.ConnectionStrings["ServerAddress"].ConnectionString.ToString();
//根据ServerAdress的固定格式确定的分割方法是‘,’,‘:’
char[] reg = { ',', ';' };
string[] ipArray = allIpStr.Split(reg);
//给定在List中的序号,为了添加、删除、修改时确定修改的位置
int index = 0;
for (int i = 0; i < ipArray.Length-1; i += 2)
{
//实例化adrClass
adrClass = new AdressClass(index,ipArray[i], ipArray[i + 1]);
//将它添加到List中
adressList.Add(adrClass);
index += 1;
}
return adressList;
}
///获得所有的serveradress,以DataSet形式放回,以便绊定到ASPxGridView中
/// </summary>
public DataSet getAllAdress()
{
DataSet allAdressSet = new DataSet();
//获得ServerAdress的List
List<AdressClass> allIpList = getAllServerAdress();
//将List转换成Dataset
allAdressSet = convertListToDataSet(allIpList);
}
///将List转成DataSet
/// </summary>
public DataSet convertListToDataSet(List<AdressClass> ipList){
DataTable dt = new DataTable();
DataRow dr;
//新增三列
DataColumn colItem0 = new DataColumn("id", Type.GetType("System.Int32"));
DataColumn colItem1 = new DataColumn("lanIp", Type.GetType("System.String"));
DataColumn colItem2 = new DataColumn("wanIp", Type.GetType("System.String"));
//将他们添加到DataTable中
dt.Columns.Add(colItem0);
dt.Columns.Add(colItem1);
dt.Columns.Add(colItem2);
{
//循环List给DataTable的每一行赋值
dr = dt.NewRow();
dr["id"] = adrc.Id ;
dr["lanIp"] = adrc.LanIp;
dr["wanIp"] = adrc.WanIp;
dt.Rows.Add(dr);
}
ds.Tables.Add(dt);
}
///写回到config文件中
/// </summary>
public void writeToConfig(List<AdressClass> adressList)
{
string allIpStr = "";
foreach (AdressClass adrc in adressList)
{
//将List<AdressClass> 拆成string写回到config中
allIpStr += adrc.LanIp + "," + adrc.WanIp + ";";
}
//Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// Configuration config = ConfigurationManager.OpenExeConfiguration("~");
/* if (ConfigurationManager.ConnectionStrings["test"] != null)
{
config.ConnectionStrings.ConnectionStrings.Remove("test");
ConfigurationManager.RefreshSection("ConnectionStrings");
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
//找到属性connectionStrings
ConnectionStringsSection conSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
//找到name为ServerAdress的string串
conSection.ConnectionStrings["ServerAddress"].ConnectionString = allIpStr;
//保存修改后的config文件
config.Save();