最近在做升级老系统的.Net Framework 版本上,遇到iBatis Net组件,发现本身提供的Oracle的Provider只有oracle9.2和oracle10.1
由于现有的Oracle Client已经到11i了 (new Version:2.112.1.0),想尝试增加Oracle11i配置
于是在Providers.config增加了
<provider
name="oracle11i"
description="Oracle, oracle provider V2.112.1.0"
enabled="true"
assemblyName="Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection"
commandClass="Oracle.DataAccess.Client.OracleCommand"
parameterClass="Oracle.DataAccess.Client.OracleParameter"
parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType"
parameterDbTypeProperty="OracleDbType"
dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter"
commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder"
usePositionalParameters="true"
useParameterPrefixInSql="true"
useParameterPrefixInParameter="true"
parameterPrefix=":"
useDeriveParameters="false"/>
同时移除掉Web.config中的
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess"
publicKeyToken="89b483f429c47342"
culture="neutral" />
<bindingRedirect oldVersion="9.2.0.401-10.9.9.999" newVersion="2.112.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
并将SqlMap.config的database provider 的name改为Oracle 11i
<!-- Database connection information -->
<database>
<provider name="oracle11i" />
<dataSource name="DB" connectionString="Password=xxgpcs;Persist Security Info=True;Enlist=False;User ID=xxgpcs;Data Source=dev" />
</database>
打开系统页面时报错
IBatisNet.Common.Exceptions.ConfigurationException: - The error occurred while loading Providers. - initialize provider - Check the oracle9.2. ---> IBatisNet.Common.Exceptions.ConfigurationException: Could not configure providers. Unable to load provider named "oracle9.2" not found, failed
当时就有点灰心,难道ibatisNet不允许增加新的provider吗,不太符合config的理念
于是就将Oracle 9.2的provider的enable设为false,不然iBatis加载所有Enable =true的Provider
<provider
name="oracle9.2"
description="Oracle, Oracle provider V9.2.0.401"
enabled="false"
assemblyName="Oracle.DataAccess, Version=9.2.0.401, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection"
commandClass="Oracle.DataAccess.Client.OracleCommand"
parameterClass="Oracle.DataAccess.Client.OracleParameter"
parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType"
parameterDbTypeProperty="OracleDbType"
dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter"
commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder"
usePositionalParameters="false"
useParameterPrefixInSql="true"
useParameterPrefixInParameter="false"
parameterPrefix=":"
useDeriveParameters="false"/>
这样系统就可以正常使用了
之前还错误的判读是不能修改或移除相应的provider,其实只需要设定Enable=false即可
通过这次经历,对ibatis.net的机制有更深入的了解