I am trying to do a Windows app and connect to an Oracle database. For now, this is all I am trying to do. When I test this from development server (Windows 2003 Server) it works fine. I copy the content of "output" folder (where the .exe file is in) to my local machine (Windows 7) and try to run the same app and get errors. Same thing happens when I copy the code to another server running Windows 2003. The error I get is:
"Could not load file or assembly 'Oracle.DataAccess, Version 2.112.3.0, culture=neutral, Public Key Token=89b483f429c47342' or one of its dependencies. An attempt was made to load a program with an incorrect format."
Since there is no Oracle.DataAccess.DLL file on either my local machine or on the server where the test failed, I thought maybe I can copy the DLL to Windows application's output folder, add a reference to this DLL and compile. But that was not the solution.
Is there any way I can fix this without expecting every machine this application (eventually, a Windows Service) is running from to have Oracle.DataAccess.DLL in GAC? Do I have to install ODAC on all the machines this application will running from (something like couple of hundred servers)?
If you can get away with the System.Data.OracleClient connection, than you don't have to do anything special on the servers.
If you want to use the ODAC connector, you will need to install the client on each of the servers and include the TNS names. It is a bad design on Oracle's part.
Both System.Data.OracleClient and Oracle.DataAccess require you to install Oracle client software on to each server. As such, their portability leaves a lot to be desired.
A more portable way to deploy your Oracle software would be to use the managed Oracle library, Oracle.ManagedDataAccess, which is available via Nuget. It does not require an Oracle client installation.
Be aware that, since Oracle.ManagedDataAccess does not rely on the oracle client software, that you will have to adjust some configurations. You can either include the tnsnames.ora along with your deployed application, write the connection string as you would an entry in tnsnames.ora, or you can specify the exact hostname/port/oracle sid.
If you insist on using an unmanaged Oracle Client, consider the following:
System.Data.OracleClient (and System.Data.OleDb) are easier to deploy than Oracle.DataAccess since they are part of the .NET framework and are written for any CPU. However, they both have the same functionality and same limitations; System.Data.OracleClient is also a deprecated library.
On the other hand, Oracle.DataAccess offers more functionality but comes in both x64 and x86 flavours, which can make deployment a lot trickier (especially on IIS-hosted web applications).
Related
I'm running an MS Access database with VBA code that has libraries for Microsoft Office 2010. Currently, there are users that are upgrading their machine to Windows 10 running Access 2016.
When the database is opened on a new machine running Access 2016 the libraries for the Outlook changes to 16.0.
When I try to open the file in the old Access 2010 environment, I run into this error:
Missing msoutl.olb.
Is there a way to make the database backwards compatible?
It sounds like the users share the same frontend hosted in a network folder.
If not done already, split the database to have a single shared backend database file. Then, to avoid your issue, distribute a separate copy of the frontend to each user's workstation.
On the workstation, let the user launch the frontend using a shortcut that runs a script to always keep the frontend current. This method is described in detail in my article:
Deploy and update a Microsoft Access application with one click
experiencing an odd issue I've yet to see on any of my other machines. This is a fresh laptop, so I have installed VS 2017, SQL Server 2017 express, then created a quick sample project using one of the stock .net core projects (with authentication stored "in-app"). This, of course, creates some basic entity migrations and DB context.
When I run I'm getting access denied errors. So, of course, I checked SQL service default user which is an admin. I then run basic migration commands and receive this
So, of course, my next step was to double check the default data locations of SQL since it appears to be trying to store it in C:\Users root?! I have never had to bother touching this during install, but worth a look. And of course, they are as I expected in their default locations of C:\Program Files\ etc
Rapidly running out of things to try at this point - and considering this is a fresh windows 10 install, with bare-bones vs 2017 and SQL express 2017 it feels a lot like a bug here. Everything is a default if you were to File -> New Project -> .NET Core Web Application with INdividual accounts.
Anyone have any thoughts or things worth trying? Why is it trying to store my DB in C:\Users? Connection string -
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-WebApplication3-53bc9b9d-9d6a-45d4-8429-2a2761773502;Trusted_Connection=True;MultipleActiveResultSets=true"
Thanks!
-Marc
You are not using SQL Server Express.
The local string says (localdb), which is the SQL Server engine running in user space. This is a big difference. Usually SQL Server or SQL Server express runs as service. (localdb) is not an alias for localhost (loopback address). It's a special name for a minified version of SQL Server which runs in user space.
When SQL Server runs as a service, it needs to have read/write permissions to the folder it writes. This is usually NOT THE CASE when the file is located within the User folder.
LocalDB on the other side, is always started when you start debugging your application and runs with the permissions of the user. So if your file was created by an admin user or outside of a directory you have write permissions.
Also, when you mount a database to SQL Server (Express), then the file is protected from write access to other applications, so LocalDB can't open it neither.
LocalDB is made for development to offer most of the SQL Server features but without all the hard setup and permanently running service in the background.
Essentially you have two options:
Use the SQL Server connection string as #TanvirArjel suggested
Detach the database from SQL Server express, copy it to your user folder (C:\Users\<myusername>\) and then correct the path to it
Then it should just work.
Notice that LocalDB is not meant to run in production, so you will likely experience issues when trying to run it in IIS (IIS Express and Console applications and WPF work fine).
Reasons for LocalDb not working with IIS is because ASP.NET (Core) applications within IIS run with a special user, but LocalDbs are always created in the users profile folder. Now, the accounts used by IIS don't have a profile and can't create the database and can't access any database outside (since localDbs are stored in user folder only the user who created it has access to it).
Here some source on it and the reasons behind it.
Using LocalDb with IIS
Write the connection string as follows.Hope it will work...
"DefaultConnection": "Server=YourPcName\\SQLExpressInstanceName;Database=aspnet-WebApplication3-53bc9b9d-9d6a-45d4-8429-2a2761773502;Trusted_Connection=True;MultipleActiveResultSets=true"
I have two solaris servers.
One server is for clearcase licenses and another is for source code repository.
Unfortunately, somehow licensing server is not working with telnet (its running in single user mode).
As a result, I cannot open ClearCase Explorer as the licensing server is not working.
Now, I wanted to get the sourcecode from the repository server to my local (windows) system.
How can we get that?
How can I deploy Access applications to multiple companies, with linked tables to SQL Azure servers?
I'm planning to deploy the Access programs with Microsoft Access runtime, and I'm assuming that I'll need to include the odbc drivers as well? Is there a way to automatically have Azure create a new server when a company signs into my website and downloads a program, and have the Access program link to it? And is there a way to get around the IP address settings in Azure as well? Because companies will be using the programs on multiple PCs. Or is it possible to utilise that and charge per PC?
If you distribute the application pre-linked, then the user should not have to do anything to consume the data.
When using Access with SQL server you can in general use the standard windows built in SQL driver. However in the case of Azure you do need to download + install the native 11 drivers (so I recommend you use that driver during development and setup).
You can also have code include to re-link to the sql server, but as noted, if your application is “already” linked, then you really don’t have to do anything on application startup. Such re-linking would not be required every time the application starts, but only a “one time” re-link is required say if you’re going to change the database, or perhaps the user logon. How to re-link (DSN less) is outlined here:
http://www.accessmvp.com/DJSteele/DSNLessLinks.html
As noted, you really don’t need the above.
As for IP restrictions, in the Azure setup you can turn off such restrictions if you need a connection that will occur from any location, but that does open up a security hole. (when you first create the SQL database you will be prompted for firewall rules).
All of the above assumes you been developing that Access application with SQL server as the back end (you can even use the free edition of SQL express for development on your local machine).
Last but not least:
Because your connection is occurring OVER the internet, then you speed will be MANY times slower then using a local server. Read the following article to get a “grasp” of this speed difference:
http://www.kallal.ca//Wan/Wans.html
So MUCH additional work is required in Access to obtain good performance when your connection is OVER the internet as opposed to SQL server running on your local network.
I created a web application through the NetBeans IDE running a glassfish server and a Java Database.
I want to now have this be standalone and run on the startup of my physical machine.
I am having trouble figuring out how to get the database set up on the server though.
On my server machine, I've got Glassfish running and I figured out where to put my war file so that it will run on the server. However I can't figure out how to get the database setup that the application needs to run.
I don't know if it has to do specifically with the glassfish server ?
Or do I need to have a separate database program along with the server ?
I believe glassfish comes with a JavaDB but i can't figure out how to actually create and configure a database. All I can do is create connection pools and resources...
According to Oracle's javadb page, it's an implementation of Apache Derby.
You should be able to download and run Derby directly on your machine. The connection strings may be different than what they were when using the embedded version, but once you figure that out it should work fine. Good luck!