摘要:使用过Enterprise Library的朋友可能都知道,所有的配置信息都是放在了配置文件里面(应用程序配置文件或者外部配置文件),大家有没有想过把配置信息保存到数据库中呢?
使用过Enterprise Library的朋友可能都知道,所有的配置信息都是放在了配置文件里面(应用程序配置文件或者外部配置文件),大家有没有想过把配置信息保存到数据库中呢?在Enterprise Library用ConfigurationSource替代了Configuration Application Block,看一下ConfigurationSource的结构图:
EL 默认的是System Configuration Source,关于如何使用File Configuration Source,在里面已经说过了,下面我们具体看一下使用Sql Configuration Source。 在安装目录的QuickStarts文件夹里面,编译后拷贝如下文件到bin目录中
Microsoft.Practices.EnterpriseLibrary.SqlConfigurationSource.dll![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Microsoft.Practices.EnterpriseLibrary.SqlConfigurationSource.Design.dll![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Microsoft.Practices.EnterpriseLibrary.ConfigurationSource.SQL.XML![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Interop.MSDASC.dll 运行CreateSqlConfiguration.cmd,注意在这之前可能要先用记事本打开SqlConfiguration.sql文件,另存为Unicode格式,如下图:
默认将安装在Northwind数据库中,安装完成后数据库中有一张Configuration_Parameter表和四个相关的存储过程。
3 .配置应用程序 经过了上面两步之后,就可以开始配置应用程序了。新建一个项目,添加App.config,使用EntLibConfig.exe打开,在新建Configuration Source的时候,会发现菜单中多了一项Sql Configuration Source:
选择之后,出现如下界面,这时需要设置Sql Configuration Source的参数,如下图所示设置存储过程名称:
设置完成后,在Configuration Source的SelectedSource节点选中Sql Configuration Source:
这里为了测试,新建一个Logging Application Block。(当有Data Access Application Block时保存总会报错,不知道是什么问题?)保存后会在数据库中多出一条记录:
<? xml version="1.0" encoding="utf-8" ?> ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
< configuration > ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
< configSections > ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
< section name ="enterpriseLibrary.ConfigurationSource" type ="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" /> ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</ configSections > ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
< enterpriseLibrary .ConfigurationSource selectedSource ="Sql Configuration Source" > ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
< sources > ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
< add name ="Sql Configuration Source" type ="Microsoft.Practices.EnterpriseLibrary.SqlConfigurationSource.SqlConfigurationSource, Microsoft.Practices.EnterpriseLibrary.SqlConfigurationSource, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
connectionString ="Password=19811218;Persist Security Info=True;User ID=sa;Initial Catalog=Northwind;Data Source=RJ-097" ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
getStoredProcedure ="EntLib_GetConfig" setStoredProcedure ="EntLib_SetConfig" ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
refreshStoredProcedure ="UpdateSectionDate" removeStoredProcedure ="EntLib_RemoveSection" /> ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
< add name ="System Configuration Source" type ="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.SystemConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" /> ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</ sources > ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</ enterpriseLibrary.ConfigurationSource > ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
</ configuration >
class Program![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
{ ![InBlock.gif](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
static void Main(string[] args)![InBlock.gif](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
{ ![InBlock.gif](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
LogEntry log = new LogEntry();![InBlock.gif](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
log.Message = "This is a test!";![InBlock.gif](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Logger.Write(log);![InBlock.gif](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}![InBlock.gif](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
} 运行程序后,在 trace.log中记录了这样的一条日志信息:
----------------------------------------![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
General Information: 0 : Timestamp: 2006-7-4 8:02:05![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Message: This is a test!![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Category: General![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Priority: -1![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
EventId: 0![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Severity: Information![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Title:![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Machine: RJ-097![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
App Domain: EntLibDemo1.vshost.exe![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
ProcessId: 5896![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Process Name: D:\Visual Studio2005 Project\EntLibDemo1\EntLibDemo1\bin\Debug\EntLibDemo1.vshost.exe![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Thread Name: ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Win32 ThreadId:4304![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Extended Properties: ![None.gif](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
---------------------------------------- 我们就可以把配置信息保存到了 SQL Server数据库中,也许有人觉得这个技巧不存在什么实际意义,但是特殊情况下,当你需要这样实现的时候,别忘了这篇Post。
本文转自lihuijun51CTO博客,原文链接: http://blog.51cto.com/terrylee/67626 ,如需转载请自行联系原作者