简易封装的 Winform 数据库服务器配置界面

来源:互联网 发布:淘宝店铺怎么导入模板 编辑:程序博客网 时间:2024/06/05 06:19

转自:http://www.cnblogs.com/a7373773/archive/2009/07/30/1535141.html

 

==================================================================================

 

小菜最近的项目接近完工了,发现有个小功能不是很满意,所以回过头优化一下、封装一下


项目源码下载
 其实就一个很笨的小功能,估计很多高手不屑看,
没关系,就当做自己日常积累吧。
结合App.Config 配置文件,设置数据库连接字符串。



上图是一个VS2008 创建的类库项目,包括了所有的类和引用的dll.  

DESEncrypt加密/解密类,取自李天平老师的DBUtility
DESEncrypt.cs


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


    /// <summary> 
    
/// 说明:本类主要负责对程序配置文件(.config)进行修改的类, 
    
/// 可以对网站和应用程序的配置文件进行修改 
    
/// 作者:周公 
    
/// 日期:2008-08-23 
    
/// 首发地址:http://blog.csdn.net/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();
        }

    }


程序配置文件类型 枚举


    public enum ConfigType
    
{
        
/// <summary> 
        
/// asp.net网站的config文件 
        
/// </summary> 

        WebConfig = 1,
        
/// <summary> 
        
/// Windows应用程序的config文件 
        
/// </summary> 

        ExeConfig = 2

    }


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


/// <summary>
    
/// SQL数据库服务器配置界面
    
/// </summary>

    internal partial class SvrConf : Office2007Form
    
{
        
        
值域成员

        
#region 加载实例

        
public SvrConf()
        
{
            InitializeComponent();
        }


        
private void SvrConf_Load(object sender, EventArgs e)
        
{
            ReadConfig();
            StartTread();
        }


        
/// <summary>
        
/// 开启线程
        
/// </summary>

        private void StartTread()
        
{
            BeginTask();
            ShowText(
"正在加载服务器列表,请稍等");
            
//开启线程
            thread = new Thread(new ThreadStart(LoadSqlServerList));
            thread.Start();
        }


        
/// <summary>
        
/// 加载服务器列表
        
/// </summary>

        private void LoadSqlServerList()
        
{
            FillList();
            EndTask();
        }


        
/// <summary>
        
/// 填充服务器列表
        
/// </summary>

        private void FillList()
        
{
            
//获取本地网络的所有服务器
            SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;
            DataTable dt 
= instance.GetDataSources();

            
foreach (DataRow row in dt.Rows)
            
{
                ShowText(
"正在加载服务器:" + row["ServerName"].ToString());
                AddServer(row[
"ServerName"]);
            }

            ShowText(
"服务器加载完毕");
        }


        
/// <summary>
        
/// 读取数据库配置信息
        
/// </summary>

        private void ReadConfig()
        
{
            
if (string.IsNullOrEmpty(
                ConfigurationManager.AppSettings[
"ConnectionString"]))
                
return;

            
string[] strConfig = ConfigurationManager.AppSettings["ConnectionString"].Split(';');
            txtServer.Text 
= strConfig[0].Replace("server=""").Trim();
            txtDataBase.Text 
= strConfig[1].Replace("database=""").Trim();
            txtUid.Text 
= strConfig[2].Replace("uid=""").Trim();
            txtPwd.Text 
= strConfig[3].Replace("pwd=""").Trim();

            chkEncrypt.Checked 
= ConntionConfig.IsEncrypt();
        }


        
#endregion


        
选择服务
         
        
测试连接

        
关闭窗口

        
保存设置

        
委托方法

    }


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


    /// <summary>
    
/// SQL数据库服务器配置静态类
    
/// </summary>

    public class ConntionConfig
    
{
        
/// <summary>
        
/// 检查配置信息
        
/// </summary>
        
/// <returns>完整有效返回true,无效则启动配置界面</returns>

        public static bool CheckConntionConfig()
        
{
            
if (CheckedConnection())
            
{
                
return true;
            }

            
else
            
{
               
return CheckedConfig();
            }

        }


        
/// <summary>
        
/// 验证配置信息
        
/// </summary>

        private static bool CheckedConfig()
        
{
            MessageBoxEx.Show(
"数据库服务器无法连接,请重新配置。",
                   
"系统提示",
                   MessageBoxButtons.OK,
                   MessageBoxIcon.Warning);

            SvrConf svrConf 
= new SvrConf();
            svrConf.ShowDialog();

            
if (MessageBoxEx.Show("是否现在进入系统?""询问",
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Question) 
== DialogResult.Yes)
            
{
                
return CheckConntionConfig();
            }

            
else
            
{
                
return false;
            }

        }


        
/// <summary>
        
/// 验证配置信息的数据库连接
        
/// </summary>

        private static bool CheckedConnection()
        
{
            
string connectionString = ConString();
            
return !string.IsNullOrEmpty(connectionString) &&
                   TestConntion(connectionString);
        }


        
/// <summary>
        
/// 测试与服务器数据库是否成功连接
        
/// </summary>
        
/// <param name="connectionString">数据库连接字符串</param>
        
/// <returns></returns>

        public static bool TestConntion(string connectionString)
        
{
            
using (SqlConnection conn = new SqlConnection(connectionString))
            
{
                
try
                
{
                    
if (conn.State == ConnectionState.Open)
                        conn.Close();
                    conn.Open();
                    
return true;
                }

                
catch
                
{
                    
return false;
                }

                
finally
                
{
                    conn.Close();
                    conn.Dispose();
                }

            }

        }


        
/// <summary>
        
/// 数据库连接字符串
        
/// </summary>
        
/// <returns></returns>

        public static string ConString()
        
{
            
if (IsEncrypt())
            
{
                
try
                
{
                    
//解密后的数据库连接字符串
                    ConfigurationManager.AppSettings["ConnectionString"=
                        DESEncrypt.Decrypt(ConfigurationManager.AppSettings[
"ConnectionString"]);

                    
return ConfigurationManager.AppSettings["ConnectionString"];
                }

                
catch 
                
{
                    
//解密不成功,返回空字符串
                    ConfigurationManager.AppSettings["ConnectionString"= string.Empty;
                    
return string.Empty;
                }

            }

            
else
            
{
                
//无须解密的数据库连接字符串
                return ConfigurationManager.AppSettings["ConnectionString"];
            }

           
        }


        
/// <summary>
        
/// 验证是否已加密
        
/// </summary>
        
/// <returns></returns>

        internal static bool IsEncrypt()
        
{
            
switch (ConfigurationManager.AppSettings["ConStringEncrypt"])
            
{
                
case "1":
                
case "TRUE":
                
case "true":
                    
return true;
                
default:
                    
return false;
            }

        }

    }


客户端项目

在客户端Main函数用一条语句
调用ConntionConfig.CheckConntionConfig()

客户端程序不需要事先创建App.Config 文件
在第一次配置成功后,会创建相应的App.Config 文件,如果有自定义的key,可以往上加。

 


   static class Program
    
{
        
/// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>

        [STAThread]
        
static void Main()
        
{
            Application.SetCompatibleTextRenderingDefault(
false);

            
//验证配置文件的数据库连接字符串。
            if (!ConntionConfig.CheckConntionConfig())
            
{
                Application.Exit();
            }

            
else
            
{
                Application.EnableVisualStyles();
                Application.Run(
new Form1());
            }

        }

    }

第一次运行,或者数据库连接字符串无效时,将出现提示窗口

加载网内服务器

测试数据库连接

保存配置信息

关闭配置窗口的提示

自动产生的 Config 文件
 


<?xml version="1.0" encoding="utf-8"?>
<configuration>
    
<appSettings>
        
<add key="ConStringEncrypt" value="TRUE" />
        
<add key="ConnectionString" value="2DBF1D39417917371156099F05C74F796EBEADAB30F8AEAC9E71AD03EDD4F047D0DC82E4D78623A405C9AF2241225F4D" />
    
</appSettings>
</configuration>
Tag标签: dotnetbar,winform,c#,a7373773
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕妇结石掉在输尿管有血尿怎么办 吃葯时药片沾在食管臂上怎么办 八十多了膀胱癌手术复发了怎么办 尿蛋白和尿隐血2个加怎么办 小肝癌手术后两个月又复发了怎么办 膀胱癌血尿堵塞尿道和尿管怎么办 肾炎腰疼一条腿疼尿血怎么办 孕晚期尿常规检查尿蛋白高怎么办? 腰开车疼的不会动了怎么办 小孩跑完满头大汗就咳嗽怎么办 小孩剧烈咳嗽喘吃了药不管用怎么办 做什么事都有点轻微的手抖怎么办 见到喜欢的人做事情就手抖怎么办 做了尿结石手术还尿血怎么办 宝宝十一个大运动发展缓慢怎么办 一岁八个月宝宝肚里有蛔虫怎么办 孕妇5个月了缺碘怎么办 4个月婴儿折了下腰怎么办 签了居间合同网签合同有异议怎么办 魅族3s手机返回键失灵怎么办 英语冠词和名词的关系用不好怎么办 炸好了的肉梭子不脆了怎么办 跑步的时候胸抖的疼怎么办 小区内安装了乒乓球桌扰民了怎么办 裁判出示红牌如果球员不走怎么办 高三文化课不好又没有特长怎么办 孩子做事磨蹭拖拉不讲效率怎么办 宝贝幼儿园哭的嗓子哑了怎么办 我给孩子转学学校不接收怎么办 眼睛被太阳晒了胀豉豉的怎么办 电脑电源灯亮着屏幕是黑的怎么办 刚办健身卡健身房跑路了怎么办 孕妇怀孕初期胖的太快怎么办 魔幻陀螺二的陀螺拆不动怎么办 我不干了小厂不给我发工资怎么办 货车司机把人撞成重伤没钱出怎么办 房主卖房定金收了不想卖怎么办 领导迟迟不给升职加薪机会怎么办 加工中心铣圆进出刀有接刀痕怎么办 烧茄子时炸茄子茄子太吸油怎么办? 梦金园黄金刚买了不给退怎么办