F#, SqlDataProvider, and Oracle - oracle

I can connect to my database just fine if I do this
let connection = new Oracle.DataAccess.Client.OracleConnection("User Id=hr;Password=hr;Data Source=localhost")
connection.Open()
This, however, will not work
#r "FSharp.Data.SqlProvider"
open FSharp.Data.Sql
type sql = SqlDataProvider<
ConnectionString = "User Id=hr;Password=hr;Data Source=localhost",
DatabaseVendor = Common.DatabaseProviderTypes.ORACLE,
ResolutionPath = "C:\apps\Oracle\product\12.1.0",
Owner = "hr">
The compiler says:
The type provider 'FSharp.Data.Sql.SqlTypeProvider' reported an error:
Exception of type 'System.Collections.Generic.KeyNotFoundException'
was thrown.
My best guess is a problem with my ResolutionPath. The ResolutionPath I've pasted here is to my Oracle client. I've also tried a ResolutionPath of [OracleClient]\bin and gotten the same result.

The resolution path of your Oracle should point to Oracle's ODP.NET (Oracle Data Provider for .NET), instead of common installation path of Oracle Database of Oracle 12c. Because basic installation of Oracle database since Oracle 11g and then 12c can't be guaranteed to include ODP.NET installation properly. Also ODP.NET installation is independent of any Oracle database installation on your machine.
You can download ODP.NET by going to Oracle Data Access (ODAC) for Windows page:
http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html
Then download the ODP.NET provider for your specific needs, either 32 or 64 bit.
Install the latest ODP.NET, and then point the ResolutionPath to the path of ODP.NET installation, especially the folder that contains common DLL of ODP.NET.
Let me know if you still have problems. Good luck!

The key UserId needs to have a space between "User" and "Id", just like in your working connection string.

Related

HY010 Oracle ODBC Function sequence error in SSIS?

I created an SSIS package to copy data from one Oracle table to another Oracle table. Each table is in a different database.
I'm getting this error for every single column of the source table:
ERROR [HY010] [Oracle][ODBC]Function sequence error
This is the screenshot.
I have no idea what this means. I've also researched but I haven't seen anything that has helped me.
How can I fix this? I did read that an alternative is to create a linked server.
I wanted to add that the ODBC driver was created with a relatively recent Oracle 12 driver, so I'm not sure why VARCHAR2 columns would not be supported.
Also wanted to point out that the Windows server where the Oracle DB is 64-bit (Windows Server 2008) and Visual Studio 2008 (where the SSIS package is created) is 32-bit. That's why the driver has "_32" at the end.
Based on the following documentation:
The error occurs when ODBC functions are called out of the order required by the ODBC Specification.
The error can also occur if an ODBC function call returns an error and the application continues making ODBC calls that require the previous ODBC call to succeed.
I think you should check that all columns data types are supported by the ODBC driver.
Similar questions
MS-Oracle ODBC Driver Function Sequence Error
Update 1
You can refer to the following link to learn more about supported data types:
Oracle® Database Gateway for ODBC User's Guide - Data Type Conversion
Note that in the link above they mentioned that:
If a table contains a column whose data type is not supported by Oracle Database Gateway for ODBC, the column information is not returned to the Oracle database.

Installing ODT giving Oracle Client Error [INS-50016]

I am trying to install ODT with ODAC in order to use Oracle with Entity Framework
it gives me the error
[INS-50016] Please install in a Regular Client Home, a new Oracle Home or an existing ODAC Home.
The error message is quite clear. You have to install also an Oracle Client (e.g. the Instant Client) - unless you use the Oracle Data Provider for .NET Managed Driver.
In case you have an Oracle Client already installed it might be the wrong version. Version of Oracle Client and Oracle Data Provider have to match exactly!
Instead of using ODAC, try the NuGet package. Oracle.ManagedDataAccess.EntityFramework

Issue with Oracle ODBC

I have a server with an Oracle Database. Using Navicat I can connect to the Database and see the database tables, run queries etc.
I am trying to add ODBC support for Oracle to be used with Crystal Reports.
What I have done so far:
I struggled to install instant client and get it working as shown in some guides. As suggested I downloaded ODAC which bundled on the Oracle ODBC Driver and Instant Client etc.
After installing I had Oracle installed in C:\app\Administrator\product\12.1.0\client_1
I added two Environmental Variable:
%ORACLE_HOME% to go to C:\app\Administrator\product\12.1.0\client_1
%TNS_ADMIN% - to go to C:\app\Administrator\product\12.1.0\client_1\Network\Admin
Once added, I then went to control panel->Administrative Tools->ODBC.
I clicked system DSN and added the connection. The connection was successful.
However, when selecting the ODBC connection via Crystal Reports, the Database is showing the database functions (I assume stored functions as they appear in the functions section for the DB in Navicat). I cannot however, see the actual database tables.
Has anyone else experienced this issue and if so does anyone know how to resolve this. Many thanks for your time

Issue with Oracle Client Data Source in SQL Server 2012 SSIS

I am having an issue with Oracle connectivity from an SSIS project, and have been Googling around to try to find a solution for over a week, now, and haven't found anything.
I have the following configuration in my dev environment:
O/S: Windows Server 2008 R2 Datacenter, 64-bit
SQL Server Data Tools, 2010
I need to configure an SSIS Data Flow Task to pull data from four different Oracle Data Sources (among others). One is Oracle version 11.1.0.7, two are version 9.2.0.4.0 and one is 9.2.0.8.0.
We use local TNSNAMES and SQLNET.ora files for our configuration.
I have tried this with many different Oracle clients, and basically get the same result, so will highlight one that I did:
Installed the Oracle Client 11gR2 64 bit.
Installed the Oracle Client 11gR2 32 bit (that order is recommended).
Copied my TNSNAMES and SQLNET.ora files into both network/admin configuration folders.
Did a successful TNSPING on each of the 4 databases named above. Successful.
Opened up SQL Server Data Tools and opened a new project
Did a "Create new Connection Manager", picked ADO.NET
Selected "Oracle Client Data Provider", enter the details of the 11g database
Did a "test Connection". Success.
Repeat the procedure for one of the 9.0 databases. When I do the "Test Connection" I get a "Test Connection failed because of an error in initializing provider. ORA-12645: Parameter does not exist".
I get this same result for all three of the 9.x databases.
Oracle "help" says that this error is caused by a missing parameter in the SQLNET.ora file, and that the solution is to add the missing parameter. Trouble is, nowhere does it say what is missing.
I have tried this same procedure with other Oracle client installs other than the two clients - ODTwithODAC1120320_32 bit, ODAC1120320_x64 and get exactly the same result. I can't go to a version 12 client because as I understand it, it won't work with a 9 database. I can't go to a 10 client because that won't work with an 11 database.
I have a feeling that it's very specific to the 64-bit O/S and version of SQL server, but that is our target platform, so need to make it work.
Can anyone help me with this, please?

VB and Oracle connectivity

What are the steps to connect to Oracle 9i with VB6? How can I use modules and stored procedures in VB6 and how can I call an SP?
What is the method to use ADO which is helpful to insert, update, search and delete the items from the front end?
You will need ADO to connect to Oracle (add reference to microsoft activex data objects library).
You need to know where is the Oracle Instance hosted alongwith username and password?
The connection string for Oracle can be found from www.connectionstrings.com
ADODB.Connection is the one that you will need to establish the connection.
Connection has Execute method - which you can use for any insert/update/delete statements.
Now, read some documentation on ADO object library from MSDN.
And, write the code by yourself.
You can choose between the Oracle OLEDB driver (which I think comes with the Oracle client install mentioned by YogoZuno) or one from Microsoft (can't remember if it was just a standard microsoft oledb driver or one released with a nod towards oracle): in any case, the Oracle OLEDB driver is far better.
You will also need to have the Oracle client installed on your PC, along with an appropriate TNS Names file. Also, be aware that there are some minor functional differences between various versions of the Oracle 9 client - I had some issues under v9.2.0.1, that did not occur under v9.2.0.7.

Resources