C#不安装Oracle10g客户端连接Oracle10g数据库【转】

时间:2022-06-20 05:51:35

最近一项目,要写成一个From程序,并且有关数据操作都是和Oracle打交道。。。
这可累了,大家都知道,本机不装Oracle客户端,本机的程序是不能访问Oracle数据库的。
可是一个客户端最少也得八十多兆。太大了。再多,程序部署也不方便。
在网上找了找还真有解决办法。狂喜.....好景不长啊。。。最后证实都不太好用。。。
最后终于在网络和同事们的共同努力下。终于测试成功。。
方法如下:(环境:Vs2003+Oracle10g)

1、把instantclient-basic-win32-10.2.0.4.zip中的文件解压到指定位置(我本机是解压到D:\fox,并命名为:instantclient)
其内面应该包括:BASIC_README、oci.dll、ocijdbc10.dll、ociw32.dll、orannzsbb10.dll、oraocci10.dll、oraociei10.dll、classes12.jar、ojdbc14.jar九个文件.
(注:下载地址:http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html;需注册用户,我下载的是:instantclient-basic-win32-10.2.0.4.zip)

2、添加tnsnames.ora文件(添加到D:\fox\instantclient文件中):
    文件tnsnames.ora其内容:
# tnsnames.ora Network Configuration File: D:\fox\instantclient\tnsnames.ora /*这是此文件地址*/
# Generated by Oracle configuration tools.

ORCL1 =/*这是本机联系Oracle服务器的服务名称,代码中用到*/
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 服务器地址IP 或服务器名称)(PORT = 服务器端口号,默认为“1521“))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = 服务器数据库服务的名字,默认为:”orcl“)
    )
  )

3、添加注册表内容:(其内容如下,涉及到的文件位置的根据自己需要改)

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
"LD_LIBRARY_PATH"="D:\\fox\\instantclient"
"TNS_ADMIN"="D:\\fox\\instantclient"
"NLS_LANG"="AMERICAN_AMERICA.ZHS16GBK"

4、添加环境变量

右键单击“我的电脑”-->“属性”-->“高级”-->“环境变量”-->“系统变量”-->选中“Path”-->“编辑”-->在“变量值”原来的数据后添加";D:\fox\instantclient"

5、重启计算机(经测试,按此顺序应该是不必重启的)。

6、查询Oracle数据库部分代码:

当然此代码的运行的基础:在此开发项目中——>添加引用——>.NET选项卡,选取System.Data.OracleClient.dll。
并在此cs开头添加:using System.Data.OracleClient;//引用Oracle连接类

        private void button8_Click(object sender, System.EventArgs e)
        {
            try
            {
                OracleConnection cnn=new OracleConnection("Data Source=orcl1;User ID=方案名;Password=密码");
                cnn.Open();
                OracleDataAdapter myDa =new OracleDataAdapter();
                  myDa.SelectCommand = new OracleCommand("select * from \"表名\"",cnn); //查询时,表名用双引号括起来
                  DataSet myDs =new DataSet();
                  myDa.Fill(myDs);
                this.textBox1.Text=myDs.Tables[0].Rows[0][0].ToString();//得到查询表的第一行第一列
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
以上就是我的不装Oracle客户端连Oracle数据库的办法。
如果有更简洁的请留言。。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lhg0302/archive/2009/04/11/4062569.aspx