今天研究了一天的Oracle数据库,尝试着如何去用c#读写Oracle数据库,没想到的是,原本以为很简单的东西,研究了整整一天。
前几天一直在和金域和LIS的开发商谈金域接口的事情,难点在于LIS开发商做这个接口要支付额外的费用,将这个事情提交医院,因为医院明年考虑整体换成东软的系统,不愿意再投入。这个时候金域跑出来了,他们愿意出这个钱,前提就是LIS开发商和他们的客户有足够多的交集。
就在我每天纠结这个事情怎么办的时候,我突然发现自己又钻入牛角尖了。我干嘛非要LIS开发商来做这个接口呢,他做了也无非就是将金域的报告集成到他们的报告查询系统中去。这个事情其实自己也可以做,集成不了,就做一个独立的查询程序了!如果再和他们这个绕,我自己都会被绕进去了,所以有时候跳跃性思维也很重要。
那就先研究怎么把金域回传的结果写入Oracel数据库,即我们的HIS吧。
1、网上一搜,很简单啊,用System.data.OracleClient命名空间里面的OracleConnection就可以了。
2、于是乎写上using System.data.OracleClient,尼玛,找不到啊!
3、继续百度之,原来微软在.net 4.0版本后,已经不再维护OracleClient了,如果要用需要到Oracle官网去下载ODAC组建。
4、于是乎去下载去吧。上次想下载的jdk因为很慢没有下载,希望这次能够快点。尼玛!!还要注册才能下载。
5、这网速,放弃。回头去VS2010里面去吧.net 4.0 改成了3.5,你不是说4以后没了么,3.5总有吧,失败,引用里面还是找不到!
6、继续百度之,原来要从文件引用,从.net里面是没有的。解决方案上->引用->添加引用,然后在文件夹C:\Windows\Microsoft.NET\Framework\v2.0.50727下就可以找到System.Data.OracleClient.dll,点击确定,就OK了。
这下总可以用了吧,其实噩耗才开始:
插入一个数据看看,中文乱码!
什么解决方案呢?
1、修改oracle数据库以及客户端的字符集(select userenv(‘language’) from dual;),一看数据的字符集AMERICAN_AMERICA.us7ascii,再去看本地电脑上注册表里面Oracle下的NLS_LANG还是AMERICAN_AMERICA.us7ascii啊,这两个一样呢,照样乱码,不过为什么乱码倒是知道了,c#是unicode编码的。
2、通过C#自带的函数设置环境变量
System.Environment.SetEnvironmentVarible(“NLS_LANG “,” SIMPLIFIED CHINESE_CHINA.ZHS16GBK”);
照样不行!
3、网上找的,用OracleParameter来格式化一下中文,别提了,是一样不行的。
眼看一天就要过去了,不甘心啊,这个问题都没有解决掉。
终极杀招,好吧,你赢了,用using System.Data.OleDb;
conn = new OleDbConnection(@”Provider=MSDAORA.1;User ID=xxx;Password=xxx;Data Source=dbserver;Persist Security Info=False”);
真的不乱码了哦,哪怕是你用Provider=’OraOleDb.Oracle’都会乱码,话说微软早先做的OleDbConnection充分考虑了字符集的问题,比Oracle官方都做的好啊?
如无特别说明,本博客文章皆为原创。转载请说明,来自吵吵博客。
吵吵微信朋友圈,请付款实名加入: