我们等闲在IBatisNet搭配文件 properties.config 加入数据库连接字符串。数据库连接字符串直接放在里面,未曾被加密,很不平安。万一我们把 properties.config 文件作为资源嵌入到过程集,好像可用处理平安问题,然而又揭示新的问题,那即便安排。因为用户安排时,是必需重新设置数据库地址,名目,用户名,密码等值的。
处理措施:
数据库连接字符串还是放在本来的过程的搭配文件中,例如 WebForms 的web.config中, WinForms的 App.config中,这么我们能够以利用企业库管教工具来加密这个搭配文件。
然后,穿越编程的措施加入数据库连接字符串。 DomSqlMapBuilderbuilder=newDomSqlMapBuilder();
NameValueCollectionprop=newNameValueCollection();
//DatabaseHelper.GetConnectionString()是用来从本来的搭配文件中获得数据库连接字符串
prop.Add("connectionString",DatabaseHelper.GetConnectionString());
builder.Properties=prop;
ISqlMappersqlMapper=builder.Configure();
由于我们自己穿越编程的措施供给了 ISqlMapper ,因而我们必需琢磨功能的问题.SqlMap是线程平安的,因而我们能够琢磨利用单件形式来供给 ISqlMapper .
全副供给 ISqlMapper 的类如下://-----------------------------------------------------------------------------------------
//模块编号http://www.gougirl.info/jiaru/622.html:
//文件名:SqlMapperHelper.cs
//描写:SqlMapperHelper类
//作者:ChenJie
//编写日期:2007-5-26
//Copyright2007
//-----------------------------------------------------------------------------------------
usingSystem;
usingIBatisNet.DataMapper;
usingIBatisNet.DataMapper.Configuration;
usingSystem.Collections.Specialized;
namespaceNovelty.CustomSystem.IBatisNet
...{
/**<ye.onmall.org;summary>
///供给ISqlMapper对象,属于单件形式(SingletonPattern)
///
publicclassSqlMapperHelper
...{
私有变量#region私有变量
/**
///ISqlMapper实例
///
privateISqlMapper_sqlMapper;
#endregion
构造函数#region构造函数
/**
///构造函数
///
SqlMapperHelper()
...{
CreateSqlMapper();
}
#endregion
嵌套类#region嵌套类
classNested
...{
staticNested()
...{
}
internalstaticreadonlySqlMapperHelperinstance=newSqlMapperHelper();
}
#endregion
属性#region属性
/**
///单一实例
///
publicstaticSqlMapperHelperInstance
...{
get
...{
returnNested.instance;
}
}
#endregion
公有措施#region公有措施
/**
///刷新ISqlMapper对象
///起因http://www.cnword.info/lianxiwomen/653.html:当数据库连接揭示改变,必需刷新该对象
///
publicvoidRefreshSqlMapper()
...{
CreateSqlMapper();
}
#endregion
私有措施#region私有措施
/**
///创立ISqlMapper对象
///
privatevoidCreateSqlMapper()
...{
//-----(1)
//DomSqlMapBuilderbuilder=newDomSqlMapBuilder();
//ISqlMapper_sqlMapper=builder.Configure("SqlMap.config");
//-----(2)
//SqlMap是线程平安的
//Mapper.Get()措施和Mapper.Instance()措施调用默认的SqlMap.config搭配文件来创立SqlMapper
//ISqlMappersm=Mapper.Get();
//以下注释内容摘自一个网友的blog:om/shanyou/articles/388602.html。
//与利用DomSqlMapBuilder类的差异是,Mapper.Get()无须要指定搭配文件的名目,并且利用Mapper.Get()归来SqlMapper后万一照射的XML未曾讹谬的话,会将该XML文件缓存到内存,
//下次调用的时候就无须要在察看XML文件,直到SqlMap.config被改换,这么将大大的长进了过程的功能,而利用DomSqlMapBuilder发生的SqlMapper每次都要先分析照射的XML文件,功能将大大的减退
www.xiaochugao.org>
DomSqlMapBuilderbuilder=newDomSqlMapBuilder();
NameValueCollectionprop=newNameValueCollection();
prop.Add("connectionString",DatabaseHelper.GetConnectionString());
builder.Properties=prop;
_sqlMapper=builder.Configure();
}
#endregion
对外属性#region对外属性
/**
///ISqlMapper实例
///
publicISqlMapperSqlMapper
...{
get
...{
return_sqlMapper;
}
}
#endregion
}
}
固然题目很短一读打听,但它确乎是一个混杂的问题,因为它是“哥德***猜想”。