惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
C
CERT Recently Published Vulnerability Notes
P
Proofpoint News Feed
Vercel News
Vercel News
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
Help Net Security
Help Net Security
月光博客
月光博客
N
News and Events Feed by Topic
Cloudbric
Cloudbric
博客园 - 司徒正美
L
LangChain Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tenable Blog
The Register - Security
The Register - Security
The Hacker News
The Hacker News
I
InfoQ
The Last Watchdog
The Last Watchdog
MyScale Blog
MyScale Blog
Schneier on Security
Schneier on Security
WordPress大学
WordPress大学
小众软件
小众软件
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
K
Kaspersky official blog
L
LINUX DO - 热门话题
N
News | PayPal Newsroom
F
Fortinet All Blogs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Security @ Cisco Blogs
Recorded Future
Recorded Future
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
Google Online Security Blog
Google Online Security Blog
S
Schneier on Security
C
Cisco Blogs
N
News and Events Feed by Topic
V2EX - 技术
V2EX - 技术
Latest news
Latest news
PCI Perspectives
PCI Perspectives
T
The Blog of Author Tim Ferriss
P
Palo Alto Networks Blog
T
Tor Project blog
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Webroot Blog
Webroot Blog
Attack and Defense Labs
Attack and Defense Labs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org

博客园 - codingsilence

更新部分字段 NHibernate 都是分号惹的祸(ORA-00911: invalid character) 降低Winform 内存占用 installshiled 创建iis应用程序池和站点 FARPOINT 常见用法 比较Double型数据时的注意事项 WinForm中获取鼠标当前位置 查看SQL Server日志 WinForm winform动态生成菜单 WinForm 从XML中动态加载菜单的示例 “轻松加愉快”地实现并使用IComparer接口 WinForm 选择器 C#程序实现动态调用DLL的研究 WCF 的 WebGet 方式 WCF WebGet WebInvoke WCF Jquery 调用 开源选型关注点 在64位Windows的IIS上开启32位程序支持(转) Oracle grant用户授权 ODP.NET开发和部署的相关问题
Client使用c#和odp.net连接server oracle
codingsilence · 2011-07-14 · via 博客园 - codingsilence

Oracle.DataAccess.dll有2.X版本和4.X版本,VS2008开发用2.X

所需的DLL可以从已安装的client中拷

由于微软在.net framework4中会将System.Data.OracleClient.dll deprecated,而且就访问效率和速度而言,System.Data.OracleClient.dll与 Oracle.DataAccess.dll相比,微软的确实没有oracle提供的类库有优势,所以我放弃了使用多年的 System.Data.OracleClient.dll,取而代之的是odp.net。然而odp .net 的优点不止这些,还包括:

1、不在安装客户端也能访问服务器上的oracle(假设Application Server与DB Server 分开)

2、不需要配置TnsNames.Ora文件

当然,我选择odp .net的最主要的原因还是性能。这篇文章列举了两者之间的对比。Technical Comparison: ODP .NET Versus Microsoft OracleClient


下面我将介绍如何在一个在新的项目中使用odp .net。环境配置:A机器,运行C#程序,没有安装oracle数据库或者客户端等任何oracle的产品;B机器就运行着一个oracle9i数据库,再没安装过其它oracle产品

首先要下载odp .net文件,可以在这个页面下载Oracle Data Access Components (ODAC) Downloads ,我下载的是Oracle 11g ODAC 11.1.0.7.20 with Oracle Developer Tools for Visual Studio这个版本。

下载完成之后不用安装,将Oracle.DataAccess.dll文件从 ODTwithODAC1110720.zip/stage/Components/oracle.ntoledb.odp _net_2/11.1.0.7.10/1/DataFiles/filegroup4.jar文件中解压出来就行,然后复制到项目中,再添加引用Oracle.DataAccess.dll。
编写如下代码:

using Oracle.DataAccess.Client; 

... 

string connstring = 

   "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1527))" + 

   "(CONNECT_DATA=(SID=orcl)));User Id=sys;Password=sys;" ; //这个也可以放到Web.Config中。 

using (OracleConnection conn = new OracleConnection(connstring)) 

   conn.Open(); 

   string sql = "select * from users" ; 

   using (OracleCommand comm = new OracleCommand(sql, conn)) 

   { 

     using (OracleDataReader rdr = comm.ExecuteReader()) 

     { 

       while (rdr.Read()) 

       { 

         Console.WriteLine(rdr.GetString(0)); 

       } 

     } 

   } 

代码编写好以后,还要从下载的压缩包中取出几个dll文件。
1、oci.dll (在jar文件里面叫’oci.dll.dbl’,拿出来之后去掉.dbl in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup2.jar)
2、oraociicus11.dll (in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.ic/11.1.0.7.0/1/DataFiles/filegroup3.jar)
3、OraOps11w.dll (in ODTwithODAC1110720.zip/stage/Components/ oracle.ntoledb.odp _net_2/11.1.0.7.10/1/DataFiles/filegroup3.jar)

下面这三个有人说需要,有人说不需要,反正也不差这三个,继续吧:
4、orannzsbb11.dll (in ODTwithODAC1110720.zip/stage/Components/oracle.ldap.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup1.jar)
5、oraocci11.dll (in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup3.jar)
6、ociw32.dll (在jar文件里面叫’ociw32.dll.dbl’,拿出来之后去掉.dbl in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup2.jar)
最后把这个DLL复制到项目中,CS的要与exe一个文件夹,B/S的有专门的bin目录。

当然,使用一项新技术,必然会遇到一些错误:以下是我遇到的:

1、运行的时候遇到这个异常提示’The provider is not compatible with the version of Oracle client’,不要紧张,检查一下上面所用到的dll是否齐全就OK。

2、“找不到请求的 .Net Framework 数据提供程序。可能没有安装。”这个错误提示是因为在machine.config中找不到Oracle.DataAccess.dll,将下面的代码放到

< DbProviderFactories ></ DbProviderFactories > 

之间就OK。

< add name = "Oracle Data Provider for .NET" invariant = "Oracle.DataAccess.Client" description = "Oracle Data Provider for .NET" type = "Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 

注:如果下载的不是ODTwithODAC1110720,有可能 dll的位置不像是上面提到的那样,需要自己去挨个找了