WebService访问oracle数据库本地调试-一步一个坑##
上篇文章提到我们额数据库挂了,重装了数据库,然后呢我需要在本地调试WebService,看看那些数据结构缺失,迁移到新数据库中去。踩坑之路正式开始,当然这不是WebService这个项目埋下的坑,应该是每个使用oracle开发WebService要踩的坑,我踩过了,希望你看到后可以轻松过去。
我的连接字符串是这样的
<add name="oracle" connectionString="Data Source=192.168.1.188:1521/orcl;Persist Security Info=True;User ID=user;Password=pdw;Unicode=True" providerName="System.Data.OracleClient"/>
这里通过System.Data.OracleClient
连接oracle数据库。踩坑之路开始...
1. ORA-12154: TNS: 无法解析指定的连接标识符
这个坑其实大家一般都不会踩到,当然入门者另当别论。
这个问题出现是因为使用System.Data.OracleClient
连接数据库,需要我们本地安装oracle客户端,配置oracle服务。
具体配置方法,大家百度一下,比比皆是。
可以通过tnsping 服务名验证服务是否可访问。
2. System.Data.OracleClient需要Oracle 客户端软件8.1.7或更高版本
这个错误比较初次看到以为是自己oracle客户端版本不对,了解之后才知道是跟文件夹权限有关。我们需要把NETWORK_SERVICE这个用户添加到clientin
文件夹的读取和执行权限上去。具体添加方法可参照这里。记得添加操作完成之后一定要重启电脑,否则可能没有效果。
我在解决的过程中把Authenticated Users这个用户也添加进去了,如果你只添加NETWORK_SERVICE不行,可以把这个用户也添加进去。
3. 尝试加载 Oracle客户端库时引发 BadImageFormatException。如果在安装32 位 Oracle客户端组件的情况下以 64位模式运行,将出现此问题
这个问题系统有关,网上提供的方案也比较多,但是需要跟自己的具体开发环境和服务器环境匹配一下才能解决自己的问题。我的oracle数据库服务器是32位,我本地是win10系统64位。刚开始我装了一个64位的客户端,运行就出现了上面的错误。然后换成32位的客户端就OK了。
装32位客户端的时候会有
,点是就行了。
4. ORA-00942: 表或视图不存在
这个问题你不一定能碰到,因为这跟我本地的一个存储过程有关。但是这个坑水太深,非了我好大的劲才爬上来。一路过关斩将以为终于大功告成,没想到又来一个表或试图不存在
。可是,可是我调用的是package
里面的一个存储过程,而且编译通过啊。
这个问题我怀疑过权限问题,但是我这个用户下是可以看到权限的;怀疑过代码,但是之前代码是正常运行的;我都要怀疑人生了,然后灵光一现我发现问题所在,各位看看不知是否吃惊:
sqlstrtemp := ' insert into temp_sum select carid,company_name,count(carid) from '||itablename||' a
left join company b on a.companyid = b.company_id ';
execute immediate sqlstrtemp;
这是我存储过程的一段代码,这里有一个表名base_company
,对,就是它,我迁移的数据库中没有这张表,但是我的存储过程编译通过了。因为这里是动态拼接的sql语句,所以我编译通过了,所以呢,我的表和视图不存在的错实际是发生在这里。OK,建表,问题解决。
其实关于oracle的各种异常的解决方法网上有很多,这里这是想把自己调试一个项目的完整的经历记录下来,方便你我查阅。