在设计模式抽象工厂那一节中就接触过配置文件,当时的感觉晕乎乎的,一直感觉好高大上的样子。后来到机房收费系统,七层的架构再次用到,可是自己过的太迷糊了,却从未想到去了解一个这个高大上的东西,直到机房系统验收,师傅说解释一下反射+抽象+配置文件,真的自己就处于一个蒙圈的状态。
其实整个机房收费系统用到配置文件的地方只有数据库的连接,我只记得自己在配置文件写过一个appSettings配置节点,在机房的SQLHelp中也就使用的它。
<?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings> <add name="UI.My.MySettings.JFConnectionString" connectionString="Data Source=JIA;Initial Catalog=JF;Persist Security Info=True;User ID=sa;Password=123456" providerName="System.Data.SqlClient" /> </connectionStrings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <add key="ConnStr" value="Data Source=(local);Initial Catalog=JF;User ID=sa;Pwd=123456" /> <add key="DBString" value="SqlServer" /> <add key="ClientSettingsProvider.ServiceUri" value="" /> </appSettings> </configuration>
看我的配置文件,这个时候在上面发现还有一个ConnectionStrings,话说这个东西是干什么的?师傅让我把SQLHelp中AppSettings换成ConnectionStrings,然后在运行,同样程序运行成功了,那么问题来了这是两个东西是什么?有什么区别?
'设置全局数据库连接字符串 Private Shared ReadOnly StrConnection As String = ConfigurationManager.ConnectionStrings("connectionString").ToString() Private Shared ReadOnly StrConnection As String = ConfigurationManager.AppSettings("ConnStr")
大家一般都使用AppSettings,可是这是什么意思?AppSettings这是一个配置节点,用它的作用就是可以在config中将我们需要添加的配置文件封装成一个个的节点,需要的时候根据节点找到需要的在修改就OK了!
1、添加System.Configuration.dll引用
2、引用using System.Configuration名称空间
3、读取config文件的appSettings节的方法比较简单,可以通过上文中System.Configuration.ConfigurationManager.AppSettings["Key"]的方法进行访问,但该方法不提供写入。
如果希望写入配置文件,可以使用ConfigurationManager对象执行打开配置文件的操作后,将会返回一个Configuration的对象,利用该对象进行操作(增删改查都可以)。(下面是一些小例子)
private void AccessAppSettings() { //获取Configuration对象 Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); //根据Key读取<add>元素的Value string name = config.AppSettings.Settings["name"].Value; //写入<add>元素的Value config.AppSettings.Settings["name"].Value ="xiao"; //增加<add>元素 config.AppSettings.Settings.Add("url","http://www.baidu.com"); //删除<add>元素 config.AppSettings.Settings.Remove("name"); //一定要记得保存,写不带参数的config.Save()也可以 config.Save(ConfigurationSaveMode.Modified); //刷新,否则程序读取的还是之前的值(可能已装入内存) System.Configuration.ConfigurationManager.RefreshSection("appSettings"); }
其实这就是在数据库连接字符串,具体的它有两种连接方式。
<connectionStrings> <add name="Conn1" connectionString="sercer=.;database=Test1;uid=sa;pwd=sa;" providerName="System.Data.SqlClient" /> </connectionStrings>
<connectionStrings> <add name="LocalSqlServer" connectionString="Data Source=.\\SQLExpress;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /> </connectionStrings>
1、两种方法只是具体用法格式上的不同,前者连接字符串的属性名为key,后者为name,但都能实现了字符串的获取。
2、检索值不同,前者使用System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]检索值;后者使用System.Configuration.ConfigurationManager.ConnectionString["ConnectionString"].ConnectionString;来检索值,且需要转换成字符串。
3、使用ConnectionString,还可以对节点进行加密解密,用来确定其安全性。
4、一般的要把数据库连接字符串放在ConnectionStrings中,若是放在appSettings中,则会报错。还有一点就是使用ConnectionString比较容易更改数据库,只需要更改provideName。
经过这样一遍学习,在配置文件写数据库连接语句还是使用ConnectionString比较好。其实这两个小东西其实只是配置文件的一小部分,还有更多的内容等着我们去学习。自我反思其实这些问题要是遇到的时候就查一下,就没有验收时的尴尬了。这些问题还是出在自己有些急功近利,只想尽快完成机房,却忽略了这些很值得学习的地方。
菜鸟一只,如有理解偏颇之处,还请各位大神斧正,不胜感激!