您的位置:首页 > 数据库 > Oracle

Asp.net连接Oracle数据库的各种奇葩合集

2017-08-02 14:11 393 查看
以前从来没用过Oracle,最近有个项目要求用Oracle数据库,让我脑细胞死了一大片,这里也是写些心得让.Net阵营的战士们一点参考,大神可无视。

先在Azure云服务器上安装Oracle 11g,装了32位的,这是好的避免后面很多兼容的问题,毕竟后面真的有一堆堆抓狂的问题。然后装了PL/Sql也是32位的,在Azure portal打开端口映射,防火墙也打开1521,如果你用默认端口的话。如果不清楚自己安装的oracle是32位还是64位,那么运行SqlPlus,在任务管理器看看有没有sqlPlus(32位),没有的话就是64位了。然后要建数据库,默认的是orcl,用这个也可以,自己也可以建别的名字的,我这里建了个MAM。会在C:\app\username\product\11.2.0\dbhome_2\NETWORK\ADMIN下面建立tnsnames.ora,这个就和后面的连接字符串很相关了,这个会搞死人的。

然后是建空间和建用户,这2步都在sqlPlus里面做,当然在plsql里面也可以。

create tablespace main_bbac logging datafile 'c:\oracle\oraData\main_bbac.DBF' size 512m;

这个是创建表空间的命令。用户我习惯在PLsql里面操作,用sys用户作为DBA登陆,在user文件夹右击添加用户,用户名密码随便取,Default tablespace选刚创建的,临时空间选Temp,Profile选default,然后点role privileges这个tab,给role选择dba,然后apply一下就建好了。

最后就把别人导出给你的数据库文件导入,这个用cmd比较好,可以看到过程,如果出错的话在plsql是闪一下就没了。记住这里用的是cmd不是sqlplus。

imp main_bbac/main_bbac@MAM file=D:\main_bbac.dmp full=y

可以看到把表试图什么的都导入了,后面要重新导入的话,登陆main_bbac用户,把函数,存储过程,表,视图全drop掉,如果还有trigger什么的也都drop掉,然后再导入。

数据库好了以后,在自己的开发机子上也要安装orcle client并且创建tnsnames,(其实后来笔者卸载了重装了都找不到tnsnames.ora这个文件了,vs里面还是可以连我就郁闷了,反正能用就行),在vs里面配置好oracle连接,复制连接字符串,自己把密码也加上去,就可以放到web.config里面使用了,这里用的是System.Data.OracleClient,这个已经被微软抛弃不更新了,貌似Oracle.ManagedDataAccess.Client会新一些,不过笔者最后没用上因为也报错。开发好了,自己本机调试完全没问题了,部署到服务器,连接不了,以为是要配置服务器的tnsnames,确实应该是要的,不过本机用的就是服务器那个配置,晕了,自己搞来搞去弄不好,写日志吧,一开始图方便用System.IO.File.AppendAllText写日志,我晕直接给我弄了个404错误,让我足足浪费了几小时把这个错查出来。后来尝试Oracle.ManagedDataAccess.Client,报ORA-12533:
TNS: 非法的 ADDRESS 参数。还是回到System.Data.OracleClient,捕获错误发现

尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。

我已经用的是32位oracle了,那么就把我的网站改成x86的,在publish的时候选x86平台,并在iis的应用程序池的高级设置启用32位应用程序。再报

ORA-12504: TNS: 监听程序在 CONNECT_DATA 中未获得 SERVICE_NAME

这是我之前自己摸索错误的时候自己把:端口号/SERVICE_NAME删掉了,加上去,终于好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: