虽然oracle,sqlserver都是关系型数据库,sql语句大部分也差不多,但是从sqlserver换到oracle还是有很多不适应的地方,本文旨在帮助广大初次接触oracle的.net程序员快速上手。

一、安装oracle 11g 服务端(可选)
1.1 为什么要安装服务端?
理论上讲,本机只需要安装oracle客户端即可,但是很多时候本机有一个服务端学习起来会更方便。比如:数据库的导入/导出,数据库的创建等,均需要服务端。
注:oracle的server真的很占内存,如果您的爱姬内存在2G以下,建议直接跳过本步骤吧.
1.2 服务端的安装文件下载地址
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
因为我的笔记本是Win2008 R2系统,所以选择了特定的win2008 x64版本(安装文件约1.9G),下载地址如下
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/111070-win64-2008soft-084715.html
在win200 r2上安装时,会提示操作系统不满足安装要求,如下图:
不用理会,直接把问题项前面的复选框勾上,然后就能进入下一步继续安装了。
安装完成的最后一个界面上,在口令管理里,最好把scott帐号解除锁定(这是学习oracle的经典帐号,很多示例教程都是用这个帐号连接的,其默认密码是tiger)
1.3 如何测试服务端是否安装正确了
先打开Net Manager
展开服务命名
点击左侧“红色叉”按钮下的图标
如果提示测试成功,则表示server端运行正常了。

二、安装for .Net特定的客户端 ODAC with Oracle Developer Tools for Visual Studio
这是oracle官方推出的for .net的连接客户端,性能优于微软自带的System.Data.OracleClient下的东东,也是目前综合性能最好的.net客户端
下载地址
http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html
一路Next即可,如果提示操作系统不满足要求,参考前面安装服务端时的处理
三、安装pl/sql developer
oracle安装完成后,自带了一个叫sql plus的查询工具,相当于sqlserver中的查询分析器,能用它练习sql,但是这个东东功能太弱,实在是难用。
所以推荐大家用第三方的pl/sql developer,百度一下就能找到下载地址和注册码。
这个软件第一次启动的界面如下:
但是如果输入scott/tiger@orcl,并不能正确连接
因为我们还没有配置tnsnames.ora文件(这个可以理解为web.config或machine.config,用于保存本机oracle client端的所有连接信息,只有正确配置以后,oracle client才能正确连接oracle db server)
进入 %oracle_home%\Network\Admin\Sample(注:%oracle_home%指oracle客户端安装后的根目录) 找到tnsnames.ora文件,把它复制到%oracle_home%\Network\Admin\下
用记事本打开,参照下面修改:
# Every line that begins with # is a comment line
#
# Create Oracle net service names, or aliases, for each database server
# you need to connect to.
#
# TNSNames.ora sample entry
#
# alias =
#  (DESCRIPTION =
#    (ADDRESS = (PROTOCOL = TCP)(HOST = myserver.mycompany.com)(PORT = 1521))
#    (CONNECT_DATA =
#      (SERVER = DEDICATED)
#      (SERVICE_NAME = orcl)
#    )
#  )
#
# You can modify the entry below for your own database.
# <data source alias> = Name to use in the connection string Data Source
# <hostname or IP> = name or IP of the database server machine
# <port> = database server machine port to use
# <database service name> = name of the database service on the server
local =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
解释一下:local是自己定义的名称,可以随便改,只要不重复就行了,host后面的部分是服务器ip地址,port是端口号,SERVICE_NAME是oracle server安装时的实例命名,修改完成后,保存。
再次打开pl/sql,会发现database下拉框里多出了一个local,如下图:
用户名输入scott,密码输入tiger,选择local,登录,成功!
三、.net与oracle的连接
这是初学者最头痛的问题,oracle有4种方式可供.net连接
3.1 古老的ODBC数据源连接
先打开"Microsoft ODBC管理员",如下图
会看到设置界面
在vs2010的server explorer面板中,创建一个connection
选择Change,再选择ODBC数据源
接下来的事情,大家照提示来就行了,不过我测试发现,ODBC方式在vs.net 2010/win2008 r2下,始终连接不上,
但是在控制面板的数据源里,test connection是成功的。
个中原因,也许只有微软知道,所以这种方式我是没实践成功,放弃!反正odbc这种老古董我也不喜欢。
3.2 微软自带的System.Data.OracleClient
同样,server explorer面板中,add 一个connection,在出来的界面中,选择change,切换成
输入用户名和密码后,就能连接成功。
特别提醒:自从oracle官方推出for .net的客户端后,微软就宣告在未来的.net版本中,将移除System.Data.OracleClient命名空间,不再提供微软版的oracle client! 详情见:http://go.microsoft.com/fwlink/?LinkID=144260
除非你的项目将来不打算升级,否则不建议大家用这种方式。
为了引用System.Data.OracleClient,需要添加对System.Data.OracleClient.dll的引用,默认是在C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0目录下
添加引用成功后,就能用下面的代码进行查询了:
using System;
using System.Data.OracleClient;namespace Sample
{class Program{static void Main(string[] args){string connString = "Data Source=local;Persist Security Info=True;User ID=scott;Password=tiger;Unicode=True";using (OracleConnection conn = new OracleConnection(connString)) {OracleCommand cmd = new OracleCommand("select * from emp", conn);conn.Open();OracleDataReader dr =  cmd.ExecuteReader();while (dr.Read()) {Console.WriteLine("{0}\t{1}", dr[0].ToString(), dr[1].ToString());}dr.Close();}Console.ReadLine();}}
}

3.3 oledb方式
连接字符串为
Provider=MSDAORA;Data Source=local;Persist Security Info=True;User ID=scott;Password=tiger

示例代码:
using System;
using System.Data.OleDb;namespace Sample
{class Program{static void Main(string[] args){string connString = "Provider=MSDAORA;Data Source=local;Persist Security Info=True;User ID=scott;PassWord=tiger";using (OleDbConnection conn = new OleDbConnection(connString)){OleDbCommand cmd = new OleDbCommand("select * from emp", conn);conn.Open();OleDbDataReader dr = cmd.ExecuteReader();while (dr.Read()){Console.WriteLine("{0}\t{1}", dr[0], dr[1]);}dr.Close();}Console.ReadLine();}}
}

3.4 Oracle官方的ODP.Net
连接字符串为 DATA SOURCE=local;PERSIST SECURITY INFO=True;USER ID=SCOTT;Password=tiger
要使用ODP.Net,必须先添加对Oracle.DataAccess.dll的引用,该文件位于%Oracle_Home%\11.2.0\odp.net\bin\4下
示例代码如下:
using System;
using Oracle.DataAccess.Client;
using System.Data;
using System.Data.Common;namespace Sample
{class Program{static void Main(string[] args){string connString = "DATA SOURCE=local;PERSIST SECURITY INFO=True;USER ID=SCOTT;Password=tiger";string ProviderName = "Oracle.DataAccess.Client";DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);using (DbConnection conn = factory.CreateConnection()){conn.ConnectionString = connString;conn.Open();DbCommand cmd = conn.CreateCommand();cmd.CommandText = "select * from emp";cmd.CommandType = CommandType.Text;DbDataReader dr = cmd.ExecuteReader();while (dr.Read()){Console.WriteLine("{0}\t{1}", dr[0], dr[1]);}dr.Close();}Console.ReadLine();}}
}

为了测试这三种方式(ODBC不考虑)的性能,简单写了一段代码测试了一下:
using System;
using Oracle.DataAccess.Client;
using System.Data;
using System.Data.OleDb;
using System.Data.Common;
using System.Diagnostics;
using MSOracle = System.Data.OracleClient;namespace Sample
{class Program{static void Main(string[] args){string temp = "";string connString = "DATA SOURCE=local;PERSIST SECURITY INFO=True;USER ID=SCOTT;Password=tiger";string ProviderName = "Oracle.DataAccess.Client";DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);int max = 5000;Stopwatch sw = new Stopwatch();sw.Start();for (int i = 0; i < max; i++){using (DbConnection conn = factory.CreateConnection()){conn.ConnectionString = connString;conn.Open();DbCommand cmd = conn.CreateCommand();cmd.CommandText = "select * from emp";cmd.CommandType = CommandType.Text;DbDataReader dr = cmd.ExecuteReader();while (dr.Read()){//Console.WriteLine("{0}\t{1}", dr[0], dr[1]);temp = dr[0].ToString();}dr.Close();//Console.WriteLine("第{0}次\t----------------------------------------", i);}}sw.Stop();Console.WriteLine("Oracle.DataAccess.Client\t{0}次耗时:{1}毫秒", max, sw.ElapsedMilliseconds);string connString2 = "Provider=MSDAORA;Data Source=local;Persist Security Info=True;User ID=scott;PassWord=tiger";sw.Reset();            sw.Start();for (int i = 0; i < max; i++){using (OleDbConnection conn =new OleDbConnection(connString2)){conn.Open();OleDbCommand cmd = new OleDbCommand("select * from emp", conn);OleDbDataReader dr = cmd.ExecuteReader();while (dr.Read()){//Console.WriteLine("{0}\t{1}", dr[0], dr[1]);temp = dr[0].ToString();}dr.Close();//Console.WriteLine("第{0}次\t----------------------------------------", i);}}sw.Stop();Console.WriteLine("System.Data.OleDb\t{0}次耗时:{1}毫秒", max, sw.ElapsedMilliseconds);string connString3 = "Data Source=local;Persist Security Info=True;User ID=scott;Password=tiger;Unicode=True";sw.Reset();sw.Start();for (int i = 0; i < max; i++){using (MSOracle.OracleConnection conn = new MSOracle.OracleConnection(connString3)){conn.Open();MSOracle.OracleCommand cmd = new MSOracle.OracleCommand("select * from emp", conn);MSOracle.OracleDataReader dr = cmd.ExecuteReader();while (dr.Read()){//Console.WriteLine("{0}\t{1}", dr[0], dr[1]);temp = dr[0].ToString();}dr.Close();//Console.WriteLine("第{0}次\t----------------------------------------", i);}}sw.Stop();Console.WriteLine("System.Data.OracleClient\t{0}次耗时:{1}毫秒", max, sw.ElapsedMilliseconds);Console.ReadLine();}}
}

运行结果:

Oracle.DataAccess.Client        5000次耗时:4711毫秒
System.Data.OleDb       5000次耗时:53684毫秒
System.Data.OracleClient        5000次耗时:8436毫秒

相信大家知道如何选择了吧,果然还是Oracle官方更熟悉自己的产品。

.net程序员使用Oracle新手上路指南相关推荐

  1. 《新程序员005:开源深度指南新金融背后的科技力量》

    各位CSDN的uu们你们好呀,今天,小雅兰来写书评啦,尽管再忙,也不能不读书,下面,就让小雅兰来带你们走进<新程序员005:开源深度指南&新金融背后的科技力量>这本书的世界吧!!! ...

  2. 程序员最新面试谈薪指南

    程序员最新面试谈薪指南 找工作不可避免的要涉及到面试,但是对于多数程序员来说,解决各种bug信手拈来,满足各种需求不在话下,面试的沟通介绍,还有最后的薪酬问题简直是比写代码痛苦百倍的事.这就造成入职同 ...

  3. 【社区图书馆】《新程序员005:开源深度指南 新金融背后的科技力量》

    各位CSDN的uu们你们好呀,今天,小雅兰来给大家推荐一本书,此书的书名为新程序员005:开源深度指南 & 新金融背后的科技力量,为什么小雅兰今天要给大家推荐这样一本书呢?好啦,现在,让我们进 ...

  4. 程序员保持健康的生活指南

    程序员保持健康的生活指南     多吃蔬菜水果是目前提倡的营养学观点,同时也已经深入人心.然而,任何事情都存在于进退的合适空间之内,过与不及都不完美.吃水果也是一样. 面对电脑时间长了不好,那该怎么办 ...

  5. 谈谈开源的利弊和国内的开源 ——《新程序员005:开源深度指南 新金融背后的科技力量》书评

    感谢CSDN的送测 <新程序员005:开源深度指南 & 新金融背后的科技力量> 是一本以计算机编程和金融科技为主题的杂志书,由中国最大的开源社区之一的开源社主办,内容丰富多样,包括 ...

  6. 书评 | 《新程序员005:开源深度指南 新金融背后的科技力量》

    目录 书评 | <新程序员005:开源深度指南 & 新金融背后的科技力量> 内容介绍 书籍优点 书评 书评 | <新程序员005:开源深度指南 & 新金融背后的科技力 ...

  7. 写给Java程序员的Java虚拟机学习指南

    大家好,我是极客时间<深入拆解Java虚拟机>作者.Oracle Labs高级研究员郑雨迪.有幸借这个专题的机会,能和大家分享为何Java工程师要学Java虚拟机?如何掌握Java虚拟机? ...

  8. 佛系程序员的月薪五万指南

    程序员问大师-- 青年:大师,你看咪蒙的助理都月薪 5 万了,我也想月薪 5 万! 大师:很简单,我这里有一份佛系月薪 5 万指南,我看你骨骼清奇.脑门光亮,一看就是将要大富大贵之人,这份指南可以助你 ...

  9. 关于大龄程序员的谣言 新手必读

    误传1:年长程序员比新手要价更高,因而年轻的开发人员更受欢迎. 事实:有经验的开发人员之所以被打上"昂贵"的标签,是因为在任何软件公司里员工的薪水永远是最大的支出.事实上,年轻就意 ...

最新文章

  1. poj 1741 Tree
  2. leetcode 416. Partition Equal Subset Sum | 416. 分割等和子集(Java)
  3. DDD“上吊绳驱动开发”,开发要想不被“吊死”,该如何自救?
  4. Spring集成和Web服务
  5. 写接口给别人调用 推送数据到我们_我们写了一个超好用的抖音矩阵数据管理工具...
  6. DC中的一些命令随笔
  7. java随机安排座位表程序_java – 为长凳生成随机座位表的最有效算法?
  8. 李彦宏发布人生第一条Vlog,发力视频从自己做起
  9. [数位dp][状压dp] Jzoj P3458 密码
  10. 用74l138实现一个一位全减器_用react实现一个仿ionic button组件
  11. iBase4J简单应用添加模块
  12. Think中文网站产品驱动程序一览表ThinkPad T61 for Win XP
  13. android怎么监听多点触摸_android 手势监听和多点触摸 笔记
  14. TCGA/癌症基因组图谱数据库|肿瘤简写中英文对照
  15. 批量解析域名为IP地址的shell脚本和python脚本
  16. 带宽不足会引起php cpu,云服务器的带宽不足会造成的影响
  17. jmeter_Ramp-up Period(in seconds)设置的作用及用法
  18. NodeRed基础1--循环结构
  19. 神经网络模型大小怎么看,神经网络模型大小计算
  20. 服务器 uefi 安装win7系统,UEFI+GPT安装win7系统图文教程

热门文章

  1. php之static静态变量详解
  2. python的import与from...import的不同之处
  3. 来学学数据分析吧(二)第一章 预测和关联数量特征
  4. 【Android】SlidingMenu属性详解
  5. Android Websites
  6. Hadoop原理及部署初探
  7. 教你一招“恶意修改主页”的处理办法
  8. Android系统编译时集成三方APK
  9. Puppy Linux 8.0 发布,代号 BionicPup
  10. 程序员3月刊,一篇文章的思考