目录
Could not get ADO.NET connection.
Spring.NET配置
1.1 在NuGet上安装图中所示Spring package包, MVC的版本根据自己的项目下载, 我这里是MVC4所以下载的Spring.Web.MVC4, 如果是5则对应更换即可, 其余两个不用动.
1.2 打开根路径下的Web.config, 注意是根路径下, 不是Views下的.
1.3 配置Web.Config文件
configuration->configSections节点下插入如下内容, 直接复制粘贴即可, 其余不用动.
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
<section name="parsers" type="Spring.Context.Support.NamespaceParsersSectionHandler, Spring.Core" />
</sectionGroup>
configuration节点下插入spring节点, 如下所示,
你需要注意如下几个信息:
provider: 如果你是MS Sql Server, 就填System.Data.SqlClient, 如果是Oracle则和我的一样, 不需要改, 其他数据库以此类推.
connectionString: 写你的数据库连接字符串
dbHelper->type: 写你的DBHelper类的FullName, 就是带命名空间的.
SystemFactory: type也需要改成带命名空间的类, 代码已经附上了, 我这里的命名空间是: EasyFramework.Common, 所以Type是 EasyFramework.Common.SystemFactory
<spring>
<context>
<resource uri="config://spring/objects" />
</context>
<objects xmlns="http://www.springframework.net" xmlns:db="http://www.springframework.net/database">
<!-- 默认的数据库访问提供程序, 通过注入来完成, 这里是注入的Oracle的数据库 -->
<db:provider id="oracleDbProvider" provider="System.Data.OracleClient" connectionString="这里写入你的Sql连接字符串" />
<object id="dbHelper" type="这里写你的数据库帮助类, 完整路径(如: Easy.DBHelper)">
<property name="DbProvider" ref="oracleDbProvider" />
</object>
<object id="systemFactory" type="EasyFramework.Common.SystemFactory" />
</objects>
<parsers>
<parser type="Spring.Data.Config.DatabaseNamespaceParser, Spring.Data" />
</parsers>
</spring>
// 命名空间是: EasyFramework.Common, 所以Type是 EasyFramework.Common.SystemFactory
public class SystemFactory : IApplicationContextAware
{
private static ILog logger = LogManager.GetLogger<SystemFactory>();
// spring的IoC容器的中心接口
private static IApplicationContext applicationContext;
/// <summary>
/// 根据config中的配置自动注入
/// </summary>
public IApplicationContext ApplicationContext
{
get
{
return applicationContext;
}
set
{
applicationContext = value;
logger.Info("Spring 初始化成功!");
}
}
}
截止到这里基础的配置已经做完了, 其他的配置根据你的业务要求追加就可以了, 配置中不要写错命名空, 否则会注入失败.
使用Spring.NET做数据库查询
先配置DBHelper, 当然你也可以不叫DBHelper, 无所谓, 我也不喜欢叫这个, 但是为了叫起来让大家熟悉些, 所以咱们随意点.
2.1 DBHelper应该继承自: Spring.Data.Generic.AdoTemplate, 我们大多数Sql执行方法都调用自这个类里面的.
可以看到这个类里面有很多我们熟悉的方法, 我们不需要重写, 只需要调用即可
我的类中重写了这两个, 一定要使用base.xxx来调用.
2.2 随意调用执行一条查询语句
如果顺利, 这条语句应该是能够执行成功的, 如果不顺利, 请回头对照检查, 下面我也会给出一些常见的问题和解决方案.
object o = SystemFactory.GetDBHelper<EasyFramework.DBAccess.DBHelper>("dbHelper").ExecuteScalar("SELECT * FROM LTS_QUOTING_CERTIFICATE");
常见问题及处理方案
调用Sql时报错(oracle)
Attempt to load Oracle client libraries threw BadImageFormatException. This problem will occur when running in 64 bit mode with the 32 bit
首先检查你的客户端Oracle的安装位数与远程数据库的Oracle的安装位数是否一致,
查询Oracle安装位数方法:
打开cmd: 执行sqlplus/onlog
如果你是64位的, 红线中的内容应该包含64bit, 我的是32的所以没有该字眼
解决方案就是打开你的IIS, 打开应用池, 选择"高级设置"
将该选项选择与你目前设置相反的
Could not get ADO.NET connection.
一般这个问题只有以下几个原因:
(1). 远程服务器连接失败, 请务必保证你的服务器数据库能够正常连接.
(2). 数据库连接字符串错误, 请检查这个属性里的字符串是否正确, 括号, 账号密码之类的.
(3). 如果你是除MS Sql Server以外的其他数据库请检查有没有装驱动, 比如Oracle如果你要使用System.Data.OracleClient, 则需要安装驱动.
不知道为什么, 总感觉在.NET中使用Spring很奇怪, 其实有很多更好的替代方案.