方案是使用Oracle Instant Client:
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
步骤一:
到Oracle官方网站下载对应的Instant Client版本,下载basic版本即可,比如我下载的是:
instantclient-basic-win32-10.2.0.4.zip
建议再下载sqlplus,以便配置结束后进行测试:
instantclient-sqlplus-win32-10.2.0.4.zip
步骤二:
新建一个文件夹,用于解压缩下载的文件,比如:
C:Oracle
然后把步骤一下载的压缩包解压至该目录下。
步骤三:
在环境变量中增加:
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
TNS_ADMIN=C:Oracleinstantclient_10_2
ORACLE_HOME=C:Oracleinstantclient_10_2
修改Path环境变量,在最前面增加:
C:Oracleinstantclient_10_2;
注意:红色部分路径要换成你自己的实际路径
步骤四:
在C:Oracleinstantclient_10_2路径下创建tnsnames.ora文件。
添加如下Oracle服务信息:
cywms =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.80)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = cywms)
)
)
注意:红色部分要换成你的Oracle连接信息
步骤五:
至此,InstantClient已经安装完成。我们打开cmd命令行测试一下:
sqlplus /nolog
应该可以看到sqlplus的版本信息,使用以下命令连接到Oracle实例:
connect sa/system@cywms
如果出现“已连接”就说明我们连接成功啦:-)
注意:请使用你自己的用户名、密码和数据库服务名
步骤六:
在C#代码中连接Oracle数据库:
using System.Data.OracleClient;
OracleConnection conn = new OracleConnection("Data Source=cywms;user=sa;password=system;"); try { conn.Open(); string sqlString = "select * from table1"; OracleDataAdapter myAdapter = new OracleDataAdapter(sqlString, conn); DataTable myDataTable = new DataTable(); myAdapter.Fill(myDataTable); return myDataTable; } catch (Exception e) { return null; } finally { conn.Close(); }
其他:
问题1:我的操作系统是Win7 64位,使用VS2010开发,连接数据库时报BadImageFormatException
如果在64位的操作系统中报以上错误,请重新下载32位版本的InstantClient,不要问我为什么:-P
网上有资料说还要修改项目的目标平台(项目右键-属性->生成->目标平台)为x86,经测试使用32位Client后,“Any CPU”也是可以的:)
问题2:PL SQL登录时候没有读取tnsnames.ora下配置的服务信息
打开PL SQL取消登录,打开工具(Tools)属性(Performances)窗口
如上图,删除Oracle Home和OCI library的配置,我们已经配置了环境变量,让PL SQL自动读取就OK了:-)
参考:
http://www.cnblogs.com/chinalantian/archive/2011/09/09/2172145.html