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

转自: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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值