How do I use Oracle from .NET?

前端 未结 5 932
星月不相逢
星月不相逢 2021-01-30 11:45

Unfortunately, I\'m trying to use Oracle from .NET and it\'s like going to back to 1997. Explaining things properly is a sign of weakness and the registry and environment variab

5条回答
  •  清酒与你
    2021-01-30 12:01

    I've spent days in the past trying to get Oracle connected in Windows 7.

    The problem I encountered was that I had a 32-bit ASP.NET application with the 32-bit Oracle ODP.NET drivers installed. I wasn't aware that, even though the ASP.NET application runs as a 32-bit process and requires the 32-bit ODP.NET, IIS is a 64-bit process and causes ODP.NET to access the 64-bit registry keys. You didn't mention whether you were trying to setup Oracle for ASP.NET, but I'll share my fix (although it is for the Oracle 10.2 install).

    (I'm copying this verbatim from my blog post)

    Note: this forces Oracle 11.2.0.1 to use 32-bit only in a 64-bit environment.

    The first mistake I made was to install the Oracle 10g client on Windows 7. This WILL NOT work. If you install it, you will have to perform some cleanup afterward.

    • Go to Oracle's site and download/install the 11g 32-bit and 64-bit clients.
    • Go here and follow the "Dummy registry entry" steps.
    • Open regedit and verify that HKLM\SOFTWARE\Wow6432Node\ORACLE\inst_loc points to the proper location (probably C:\oracle\Inventory)
    • Point the registry entry at HKLM\SOFTWARE\Wow6432Node\ORACLE\VOBHOME2.0 to the 32-bit Oracle folder
    • Create an ORACLE_HOME environment variable and point it to the 32-bit folder.

    Now you should be all set after a restart.

    If you tried installing the Oracle 10g client, you'll have to perform some cleanup. First, make sure Oracle 10g is completely uninstalled, dereferenced from your PATH variable, and the directory is removed. Then, find the assemblies referenced in the GAC:

    gacutil /l | find /i "Oracle" > c:\[some directory]\oracle.txt
    

    Find the lines referring to Oracle.DataAccess version 10.2 and remove them from the GAC. As an example (this won't work unless you have the same version installed):

    gacutil /u "Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342"
    

    When I did this, I had three assemblies to remove:

    1. Oracle.DataAccess
    2. Policy.10.1.Oracle.DataAccess
    3. Policy.9.2.Oracle.DataAccess

    Again, you'll probably need to restart (hey, it's Windows).


    If you need to perform any cleanup, I've also blogged about that

    For reference
    In case the link to the "Dummy registry entry" steps dies, here's the text from that post by Gadi:

    "" Hi Ben,

    At design time, when working with the SQL Server Business Intelligence Development Studio, the Oracle Connector is running in 32-bit mode and therefore it loads the 32-bit Oracle client.

    Most likelly, you are getting the error because the connector is loading the wrong Oracle client (oci.dll), where the TNS service is not defined.

    To solve the problem, you have two options:

    1. Specify the Oracle connection string, instead of the TNS service name in the Oracle Connection Manager Editor, for example, in the following format: host:port/service_name

    2. Define a dummy registry entry (Z_SSIS) as follows:

      • Open the regedit utility.
      • Locate the following Key: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE.
      • Right-Click on ORACLE node and click on New -> Key.
      • Call the new key Z_SSIS (to make sure it's the last entry).
      • Right-Click on the Z_SSIS node and click on New -> String.
      • Name the property ORACLE_HOME.
      • Double-Click on the ORACLE_HOME and set it to the location of the Oracle 32Bit installation home directory you whant to use.

    Regards,

    Gadi ""

提交回复
热议问题