在实际项目里,我们需要用一个应用程序去连接多个数据库,有的进行测试,有的是数据库基本结构相同,数据不同, 我们不可能总去程序的连接字符串里去修改,更不能让用户去修改,所以需要动态去修改连接数据库配置信息。如果安全性可考虑的话需要对字符串加密,我这里写点简单的实现,希望大家有好的方法或意见,请执教和批评。

1 在应用程序里添加app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!--   User application and configured property settings go here.-->
        <!--   Example: <add key="settingName" value="settingValue"/> -->
        <add key="ServerIP" value="127.0.0.1"/>
        <add key="Server" value="Automation_temp"></add>
        <add key="user" value="sa"></add>
        <add key="password" value="shan"></add>
</appSettings>
</configuration>

程序读取数据库连接,如下:

如果想把连接的信息显示出来,可以去解析字符串strcon,获取相关信息
private void Open()
        ...{
            // open connection
            if (con == null)
            ...{
                
                string strcon=String.Format ("packet size=4096;data source={0};persist security info=True;initial catalog={1};user id={2};password={3}",ConfigurationSettings.AppSettings["SQLserverIP"],
                   ConfigurationSettings.AppSettings["Server"],ConfigurationSettings.AppSettings["user"],ConfigurationSettings.AppSettings["password"]);
                con = new SqlConnection(strcon);
                try
                ...{
                    con.Open();
                }
                catch(Exception ee)
                ...{
                    ee.ToString();
                }
            }                
        }

2 新建窗体ConfigFrm

添加4个label  ,分别是:

服务器ip,Database Name,SA,password,

4个TextBox,分别是:

txtIP

txtDataBaseName

txtName

txtPwd

1个确认按钮btnOK,

3  写个方法保存修改的设置:

private void SaveConfig(string ConnenctionString,string strKey)
        ...{
            XmlDocument doc=new XmlDocument();
            //获得配置文件的全路径
            string strFileName=AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
            doc.Load(strFileName);
            //找出名称为“add”的所有元素
            XmlNodeList nodes=doc.getElementsByTagName_r("add");
            for(int i=0;i<nodes.Count;i++)
            ...{
                //获得将当前元素的key属性
                XmlAttribute att=nodes[i].Attributes["key"];
                //根据元素的第一个属性来判断当前的元素是不是目标元素
                if (att.Value==strKey)
                ...{
                    //对目标元素中的第二个属性赋值
                    att=nodes[i].Attributes["value"];
                    att.Value=ConnenctionString;
                    break;
                }
                
                
            }
            //保存上面的修改
            doc.Save(strFileName);
        }

4 在确认按钮btnOK click事件:

private void btnOK_Click(object sender, System.EventArgs e)
        ...{
            if (txtIP.Text=="")
            ...{
                MessageBox.Show("ServerIP is not allow null");
                return ;
            }
            else if(txtDataBaseName.Text=="")
            ...{
                MessageBox.Show("DataBase is not allow null");
                return ;
            }
            else if(txtName.Text=="")
            ...{
                MessageBox.Show("User Name is not allow null");
                return ;
            }
            else
            ...{
                SaveConfig(txtIP.Text,"ServerIP");
                SaveConfig(txtDataBaseName.Text,"Server");
                SaveConfig(txtName.Text,"user");
                SaveConfig(txtPassword.Text,"password");
                MessageBox.Show("Config Sucessful!","",MessageBoxButtons.OK,MessageBoxIcon.Warning);
            }
            this.Close();
            
        }

在应用程序当前目录下,程序动态加载的是 /bin/debug/test.exe.config信息,从而实现了动态读写xml文件,去获取

数据库连接。

在实际项目里,我们需要用一个应用程序去连接多个数据库,有的进行测试,有的是数据库基本结构相同,数据不同, 我们不可能总去程序的连接字符串里去修改,更不能让用户去修改,所以需要动态去修改连接数据库配置信息。如果安全性可考虑的话需要对字符串加密,我这里写点简单的实现,希望大家有好的方法或意见,请执教和批评。

1 在应用程序里添加app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!--   User application and configured property settings go here.-->
        <!--   Example: <add key="settingName" value="settingValue"/> -->
        <add key="ServerIP" value="127.0.0.1"/>
        <add key="Server" value="Automation_temp"></add>
        <add key="user" value="sa"></add>
        <add key="password" value="shan"></add>
</appSettings>
</configuration>

程序读取数据库连接,如下:

如果想把连接的信息显示出来,可以去解析字符串strcon,获取相关信息
private void Open()
        ...{
            // open connection
            if (con == null)
            ...{
                
                string strcon=String.Format ("packet size=4096;data source={0};persist security info=True;initial catalog={1};user id={2};password={3}",ConfigurationSettings.AppSettings["SQLserverIP"],
                   ConfigurationSettings.AppSettings["Server"],ConfigurationSettings.AppSettings["user"],ConfigurationSettings.AppSettings["password"]);
                con = new SqlConnection(strcon);
                try
                ...{
                    con.Open();
                }
                catch(Exception ee)
                ...{
                    ee.ToString();
                }
            }                
        }

2 新建窗体ConfigFrm

添加4个label  ,分别是:

服务器ip,Database Name,SA,password,

4个TextBox,分别是:

txtIP

txtDataBaseName

txtName

txtPwd

1个确认按钮btnOK,

3  写个方法保存修改的设置:

private void SaveConfig(string ConnenctionString,string strKey)
        ...{
            XmlDocument doc=new XmlDocument();
            //获得配置文件的全路径
            string strFileName=AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
            doc.Load(strFileName);
            //找出名称为“add”的所有元素
            XmlNodeList nodes=doc.getElementsByTagName_r("add");
            for(int i=0;i<nodes.Count;i++)
            ...{
                //获得将当前元素的key属性
                XmlAttribute att=nodes[i].Attributes["key"];
                //根据元素的第一个属性来判断当前的元素是不是目标元素
                if (att.Value==strKey)
                ...{
                    //对目标元素中的第二个属性赋值
                    att=nodes[i].Attributes["value"];
                    att.Value=ConnenctionString;
                    break;
                }
                
                
            }
            //保存上面的修改
            doc.Save(strFileName);
        }

4 在确认按钮btnOK click事件:

private void btnOK_Click(object sender, System.EventArgs e)
        ...{
            if (txtIP.Text=="")
            ...{
                MessageBox.Show("ServerIP is not allow null");
                return ;
            }
            else if(txtDataBaseName.Text=="")
            ...{
                MessageBox.Show("DataBase is not allow null");
                return ;
            }
            else if(txtName.Text=="")
            ...{
                MessageBox.Show("User Name is not allow null");
                return ;
            }
            else
            ...{
                SaveConfig(txtIP.Text,"ServerIP");
                SaveConfig(txtDataBaseName.Text,"Server");
                SaveConfig(txtName.Text,"user");
                SaveConfig(txtPassword.Text,"password");
                MessageBox.Show("Config Sucessful!","",MessageBoxButtons.OK,MessageBoxIcon.Warning);
            }
            this.Close();
            
        }

在应用程序当前目录下,程序动态加载的是 /bin/debug/test.exe.config信息,从而实现了动态读写xml文件,去获取

数据库连接。

C# WINFORM 应用程序动态读写xml config文件,获取数的更多相关文章

  1. C#中动态读写App.config配置文件

    转自:http://blog.csdn.net/taoyinzhou/article/details/1906996 app.config 修改后,如果使用cofnigurationManager立即 ...

  2. 通过源码了解ASP.NET MVC 几种Filter的执行过程 在Winform中菜单动态添加“最近使用文件”

    通过源码了解ASP.NET MVC 几种Filter的执行过程   一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神 ...

  3. 【C#】【WPF】如何读写app.config文件

    WPF生成的项目中会有.exe.config.一般是系统默认配置的 格式是xml格式,C#的项目可以直接读写这些文件.方法代码如下. public static string GetConnectio ...

  4. OpenCV FileStorage类读写XML/YML文件

    本文转自:http://www.cnblogs.com/summerRQ/articles/2524560.html 在OpenCV程序中,需要保存中间结果的时候常常会使用.xml / .yml文件, ...

  5. 关于读写APP.config文件能读却写不了的问题

    今天要求用winform写一个窗口用来读写一个App.config,要对  <appSettings>里面的add key和value进行添加和修改.要实现的效果图如下: -------- ...

  6. Winform读写App.config文件以及重启程序

    //重启主程序 //System.Diagnostics.Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Locatio ...

  7. 建立连接ALM的xml config文件

    我就不贴所有的了,如果有谁想要所有源码和应用程序,可以密我 这里我贴下如何在第一次运行的时候自动建立一个ALMConfig的xml文件 private static void CreateALMCon ...

  8. 在控制台程序中,添加config文件

    一.右击类库 → 添加 → 新建项 → 应用程序配置文件(或者选择一个XML文件,然后将名字改成XXX.config),内容如下: <?xml version="1.0" e ...

  9. 在Winform中菜单动态添加“最近使用文件”

    最近在做文件处理系统中,要把最近打开文件显示出来,方便用户使用.网上资料有说,去遍历“C:\Documents and Settings\Administrator\Recent”下的最近文档本.文主 ...

随机推荐

  1. 【转载】app测试的过程和重点关注内容

    针对 app测试的过程和重点关注内容,做以下梳理和总结:   1 . 首先是测试资源确认及准备 ( 1 ) 产品需求文档.产品原型图.接口说明文档以及设计说明文档等应齐全: ( 2 ) 测试设备及工具 ...

  2. IntelliJ IDEA 注册码 (秘钥)

    给大家提供一个IDEA的注册码,最晚到2018年2月到期. 如下,展开复制即可: C0FHYYCJ22-eyJsaWNlbnNlSWQiOiJDMEZIWVlDSjIyIiwibGljZW5zZWVO ...

  3. web进修之—Hibernate HQL(7)

    概述 HQL是Hibernate封装成为面向对象的数据库查询语言,具有如下特点: 面向对象,包括继承.多态和关联之类的概念,SQL操作的数据库的表,HQL更像是操作对象 大小写敏感,只对对象和属性敏感 ...

  4. ElasticSearch实战:Linux日志对接Kibana

    本文由云+社区发表 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTFul web接口.ElasticSearch是用Java开发 ...

  5. gops —— Go 程序诊断分析工具

    GitHub: https://github.com/google/gops 一个用于列出和诊断分析系统中正在运行的 Go 程序的命令行工具 安装 go get -u github.com/googl ...

  6. 翻译:非递归CTE(已提交到MariaDB官方手册)

    本文为mariadb官方手册:非递归CTE的译文. 原文:https://mariadb.com/kb/en/library/non-recursive-common-table-expression ...

  7. Java编程思想——异常

    1.异常对象的方法printStackTrace 作用是打印Throwable和Throwable的调用栈轨迹. 2.finally 不管抛没抛出异常,都会执行finally中的代码.前提是出异常的代 ...

  8. Chrome插件开发,美化网页上的文件列表。chrome-extension,content-scripts

    趁着2018年还剩最后几天,发几篇博客,荒废太久了,惭愧. 最近也是需求驱动,研究了下Chrome插件开发.来看一下我们公司运维提供的日志查看页面 所有项目的日志都参杂在一起,每次去找都很痛苦.慢慢发 ...

  9. EF 延时加载与死锁

    第一种 #region 第一种延迟加载 用到的时候就会去查询数据. //用到的时候就会去查询数据. //IQueryable<UserInfo> temp = from u in dbCo ...

  10. C#中设置窗口在最前显示而其他窗口不能使用

    对程序中的一个Form1处理,让其在打开的情况下,其他窗体都无法使用,全部焦点都在他身上. 1.这种方法最简单,直接调用窗体的模态对话框函数显示窗体 Form1.ShowDialog(): 2.设置窗 ...