小菜最近的项目接近完工了,发现有个小功能不是很满意,所以回过头优化一下、封装一下
项目源码下载
其实就一个很笨的小功能,估计很多高手不屑看,
没关系,就当做自己日常积累吧。
结合App.Config 配置文件,设置数据库连接字符串。
上图是一个VS2008 创建的类库项目,包括了所有的类和引用的dll.
DESEncrypt加密/解密类,取自李天平老师的DBUtility
DESEncrypt.cs

/**//// <summary>
/// DES加密/解密类。
/// </summary>
public class DESEncrypt

{
public DESEncrypt()

{
}


========加密========#region ========加密========


/**//// <summary>
/// 加密
/// </summary>
/// <param name="Text"></param>
/// <returns></returns>
public static string Encrypt(string Text)

{
return Encrypt(Text, "litianping");
}

/**//// <summary>
/// 加密数据
/// </summary>
/// <param name="Text"></param>
/// <param name="sKey"></param>
/// <returns></returns>
public static string Encrypt(string Text, string sKey)

{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray;
inputByteArray = Encoding.Default.GetBytes(Text);
des.Key = ASCIIEncoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
des.IV = ASCIIEncoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())

{
ret.AppendFormat("{0:X2}", b);
}
return ret.ToString();
}

#endregion


========解密========#region ========解密========



/**//// <summary>
/// 解密
/// </summary>
/// <param name="Text"></param>
/// <returns></returns>
public static string Decrypt(string Text)

{
return Decrypt(Text, "litianping");
}


/**//// <summary>
/// 解密数据
/// </summary>
/// <param name="Text"></param>
/// <param name="sKey"></param>
/// <returns></returns>
public static string Decrypt(string Text, string sKey)

{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
int len;
len = Text.Length / 2;
byte[] inputByteArray = new byte[len];
int x, i;
for (x = 0; x < len; x++)

{
i = Convert.ToInt32(Text.Substring(x * 2, 2), 16);
inputByteArray[x] = (byte)i;
}
des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
return Encoding.Default.GetString(ms.ToArray());
}

#endregion
}
ConfigurationOperator 程序配置文件(.config)修改类,取自周公http://blog.youkuaiyun.com/zhoufoxcn/archive/2008/08/24/2823508.aspx
ConfigurationOperator.cs

/**//// <summary>
/// 说明:本类主要负责对程序配置文件(.config)进行修改的类,
/// 可以对网站和应用程序的配置文件进行修改
/// 作者:周公
/// 日期:2008-08-23
/// 首发地址:http://blog.youkuaiyun.com/zhoufoxcn/archive/2008/08/24/2823508.aspx
/// </summary>
public class ConfigurationOperator

{
private Configuration config;
private string configPath;
private ConfigType configType;

/**//// <summary>
/// 对应的配置文件
/// </summary>
public Configuration Configuration

{

get
{ return config; }

set
{ config = value; }
}

/**//// <summary>
/// 构造函数
/// </summary>
/// <param name="configType">.config文件的类型,只能是网站配置文件或者应用程序配置文件</param>
public ConfigurationOperator(ConfigType configType)

{
this.configType = configType;
if (configType == ConfigType.ExeConfig)

{
configPath = Application.ExecutablePath;
//AppDomain.CurrentDomain.BaseDirectory;
}
else

{
//configPath = HttpContext.Current.Request.ApplicationPath;
}
Initialize();
}

/**//// <summary>
/// 构造函数
/// </summary>
/// <param name="path">.config文件的位置</param>
/// <param name="type">.config文件的类型,只能是网站配置文件或者应用程序配置文件</param>
public ConfigurationOperator(string configPath, ConfigType configType)

{
this.configPath = configPath;
this.configType = configType;
Initialize();
}
//实例化configuration,根据配置文件类型的不同,分别采取了不同的实例化方法
private void Initialize()

{
//如果是WinForm应用程序的配置文件
if (configType == ConfigType.ExeConfig)

{
config = System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);
}
else//WebForm的配置文件

{
//config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath);
}
}

/**//// <summary>
/// 添加应用程序配置节点,如果已经存在此节点,则会修改该节点的值
/// </summary>
/// <param name="key">节点名称</param>
/// <param name="value">节点值</param>
public void AddAppSetting(string key, string value)

{
AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("appSettings");
if (appSetting.Settings[key] == null)//如果不存在此节点,则添加

{
appSetting.Settings.Add(key, value);
}
else//如果存在此节点,则修改

{
ModifyAppSetting(key, value);
}
}

/**//// <summary>
/// 添加数据库连接字符串节点,如果已经存在此节点,则会修改该节点的值
/// </summary>
/// <param name="key">节点名称</param>
/// <param name="value">节点值</param>
public void AddConnectionString(string key, string connectionString)

{
ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings");
if (connectionSetting.ConnectionStrings[key] == null)//如果不存在此节点,则添加

{
ConnectionStringSettings connectionStringSettings = new ConnectionStringSettings(key, connectionString);
connectionSetting.ConnectionStrings.Add(connectionStringSettings);
}
else//如果存在此节点,则修改

{
ModifyConnectionString(key, connectionString);
}
}

/**//// <summary>
/// 修改应用程序配置节点,如果不存在此节点,则会添加此节点及对应的值
/// </summary>
/// <param name="key">节点名称</param>
/// <param name="value">节点值</param>
public void ModifyAppSetting(string key, string newValue)

{
AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("appSettings");
if (appSetting.Settings[key] != null)//如果存在此节点,则修改

{
appSetting.Settings[key].Value = newValue;
}
else//如果不存在此节点,则添加

{
AddAppSetting(key, newValue);
}
}

/**//// <summary>
/// 修改数据库连接字符串节点,如果不存在此节点,则会添加此节点及对应的值
/// </summary>
/// <param name="key">节点名称</param>
/// <param name="value">节点值</param>
public void ModifyConnectionString(string key, string connectionString)

{
ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings");
if (connectionSetting.ConnectionStrings[key] != null)//如果存在此节点,则修改

{
connectionSetting.ConnectionStrings[key].ConnectionString = connectionString;
}
else//如果不存在此节点,则添加

{
AddConnectionString(key, connectionString);
}
}

/**//// <summary>
/// 保存所作的修改
/// </summary>
public void Save()

{
config.Save();
}
}

项目源码下载

没关系,就当做自己日常积累吧。
结合App.Config 配置文件,设置数据库连接字符串。

上图是一个VS2008 创建的类库项目,包括了所有的类和引用的dll.
DESEncrypt加密/解密类,取自李天平老师的DBUtility


















































































































ConfigurationOperator 程序配置文件(.config)修改类,取自周公http://blog.youkuaiyun.com/zhoufoxcn/archive/2008/08/24/2823508.aspx






































































































































































































程序配置文件类型 枚举


















SQL数据库服务器配置界面类


















































































































































































































































































































































































































































SQL数据库服务器配置静态类





















































































































































































客户端项目
在客户端Main函数用一条语句
调用ConntionConfig.CheckConntionConfig()
客户端程序不需要事先创建App.Config 文件
在第一次配置成功后,会创建相应的App.Config 文件,如果有自定义的key,可以往上加。


































加载网内服务器

测试数据库连接

保存配置信息

关闭配置窗口的提示

自动产生的 Config 文件









