This may be a simple yes/no answer. I have a classic ASP file opening a ADODB connection to an access database via an ODBC string that references a DSN. I believe however that the DSN has to be known to the IIS machine where the ASP is running, is that correct?
It basically just a
"Yes it is correct"
answer, but to try and explain a little why this is the case.
In a Windows environment DSN is just another form of connection string that is stored inside the Windows Registry or File System and are managed by a program called ODBC Datasource Administrator (odbcad32.exe).
If you are working with IIS and the web application contains references to DSN then you will likely find them inside the System DSN tab in the ODBC Datasource Administrator. There is however one caveat to this and that is with the surge of 64 Bit Operating Systems and how accessing DSNs is affected.
Where is odbcad32.exe Located?
Is the Machines Window Operating System 64 Bit?
Yes - Go to point 2.
No
%SystemRoot%\System32\odbcad32.exe
Is the Web Appication running in 32 Bit Mode?
Yes
%SystemRoot%\SysWOW64\odbcad32.exe
No
%SystemRoot%\System32\odbcad32.exe
Related
I've installed Firebird 3.0.3 Classic Server 32-bit on a newly setup Windows Server 2016 (32-bit because I have to use a legacy UDF dll that's only available in 32-bit). Except for the 64-bit ODBC connection, all connections work fine from client machines (32-bit ODBC connection, FlameRobin). But when I try to access the database through the 64-bit ODBC DSN, I get the error "your username and password are not defined".
My client machine in this case is a Windows Server 2012 R2. I've done the following steps:
install the 32-bit Firebird Client libraries (version 3.0.3)
install the 64-bit Firebird Client libraries (version 3.0.3)
install the 32-bit ODBC driver (version 2.0.5.156)
install the 64-bit ODBC driver (version 2.0.5.156)
open the 32-bit Windows ODBC administration console and create the DSN - connection test OK
Screenshot: https://postimg.cc/WDrJQryH
open the 64-bit Windows ODBC administration console and create the DSN - connection error!
Screenshot: https://postimg.cc/5XDC7psz
I'm sure I haven't missspelled the password. What could I have missed? Thanks a lot!
In general problems like this (when you have two almost identical applications and only one of them working) are often diagnosed by comparing their behavior and looking for differences, then trying to change computer or application setting to eliminate suspicious and unneeded differences unless both program work. A useful tool for it would be for example SysInternals Process Monitor, which can be set to record files I/O tracks (also registry and other things), which can give a valuable insight into program implementation and its failure. In this particular case when u press "test connection" buttons in ODBC32 and ODBC64 windows the track of files and registry accesses would probably highlight where things start go wrong for 64-bits application in contrast with the 32-bits one.
If to skip systematic diagnostic for a while and try mere guessing, then Mark suggests that the 64-bit app fails to locate the proper fbclient.dll (where proper might mean many things: FB version, 32/64-bitness, textual configuration files and what not).
Seeing your ODBC setup windows have an explicit fields "Client" with "Browse" button I make a guesstimation that ODBC tries to auto-locate the client library and for some reason locates some unlucky one.
Then I suggest you to try to set that "Client" field to precisely the fbclient.dll file that the Firebird engine itself uses, and if you did not changed default installation settings it would be something like something like "c:\Program Files\Firebird\Firebird_3_0\bin\fbclient.dll"
I have developed ASP.Net application which is connecting to Oracle Database using ODBC via DSN connection.
Everything works on my local development environment but after I deployed in IIS, it is unable to connect to database & logs below error.
***[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified***
Then I started looking for solution & tried below things but nothing worked.
Checked the application is developed using Platform Any CPU.
DSN is configured & Tested Connection using Oracle client 64 bit ODBC Data Source. On 64 bit server DSN can be configured for 64 bit & 32 bit also.
Tried with setting permissions to DSN in registry for the apppool identity user.
Tried AppPool Setting for Enable 32Bit Application to True, in this case it give another error that ODBC & application architecture mismatch.
Please let me know if any more alternative is there, otherwise I am thinking of installing 32bit oracle client & try to connect using 32bit ODBC DSN.
Thanks for your help in advance.
Found this link very helpful.
https://support.microsoft.com/en-in/kb/942976
It says about the visibility of DSN connections for 32bit & 64bit applications.
Tried with small test utility (winform) & the behaviour for 32bit & 64 bit application can be distinquished.
But unable to find the solution for ASP.Net application.
I have built the code using X64 platform & then deployed it in IIS.
I was using 11.2.0 client so it started reading the DSN but Arithmetic operation resulted in an overflow exception. This is issue in the driver need to install the patch.
https://blogs.msdn.microsoft.com/mariae/2012/07/05/arithmetic-operation-resulted-in-an-overflow-error-running-a-report-that-uses-a-connection-data-source-to-oracle-10/
My application is in classic asp. Till now it is working fine with 32bit windows server and connecting oracle via a system DSN which is prepared with "Microsoft ODBC driver for oracle".
Now, the server has been migrated to 64bit Windows server 2008 R2. We have some third party dlls, which also have 64bit available. So, I deploy the application in IIS 7.5 and it is working fine.
In new server, I am using Oracle driver, as for 64bit, there is no driver of "Microsoft ODBC Driver For Oracle". Everything is working fine, except, when I try to fetch a record-set, it is returning nothing. No Error message, no data, nothing is coming.
Also, I can't change the app pool compatibility with 32 bit to "True", because, there are some third-party component which will only work in either of one environment. Either 32 bit or 64 bit.
So, my concern is, whether I can work with both the DSN[32 and 64]? OR any other idea to run the application.
Could you use an OLEDB driver instead. Oracle certainly provide a 64 bit OLEDB driver, and it could well be installed on your server already.
http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html
Here's another useful link, with a very friendly URL
http://www.connectionstrings.com/oracle/
ODBC isn't generally regarded as the best way to go, unless you're using MySQL when it's pretty much your only option
I've never coded in ASP.NET, but I've been a web (PHP) developer for almost 3years now,
Problem is I've never coded in anything .NET after I completed my studies and I've never worked with IIS and MS Servers either.
I need to create a connection from an ASP.NET (VB) script to an Informix database.
google took me to this; IBM Informix connection example but I haven't a clue how to add these drivers to IIS, the IBM Informix Client SDK is installed on the server, but when I open the dialogs in IIS to add them as Handlers, I'm prompted for things I don't know the meaning of, I haven't found anything that says tutorial that is of any help and nor have I found anything on stack overflow.
I feel like an African stuck in China, what the hell do I do first and where do I go?
I have used ODBC in the past to connect to Informix, like this. If you have an Informix DBA, he will provide the values for host, server, and service. host is the name of the host machine where the database server resides. service is the service name in the services file but it actually maps to the port Informix listens. Server is the actual server.
string connectionString = "Driver={INFORMIX};host=myhost;server=myserver;service=23300;protocol=onsoctcp;database=dbase;uid=user;pwd=pass;client_locale=en_US.CP1252;db_locale=en_US.8859-1;"
OdbcConnection conn = new OdbcConnection(connectionString);
conn.Open();
For more connection string samples, see here.
To test, you can create an ODBC data source and test the connection without writing any code.
Okay, so as it turns out, I didn't find anything solid, so I went to find help in a clients office from an experienced .NET developer.
I was told to create a DSN on the server machine using ODBC, in the steps explained here
after that I referred to the DSN connection in the connection string, like this;
DSN=myDsn;Uid=myUsername;Pwd=p%W$d;
And I had to add impersonation to my asp.net scripts, as is done here using the same user I was logged in as when creating the DSN connections in ODBC
I had similar issues when trying to connect to an Informix DB from ASP.NET Console Application, but eventually found a way to connect! Here is the connection string i used that did the trick:
Database=db_cra;Host=192.168.160.207;Server=sipccx1_uccx;Service=1504;Protocol=onsoctcp;UID=MyUserId;Password=MyPassWord;DB_LOCALE=EN_US.UTF8;CLIENT_LOCALE=EN_US.UTF8;
Notes: The DB_LOCALE and CLIENT_LOCALE were the missing puzzle pieces for me. Also, "Service" means "Port" and "Server" is Informix instance name - defined in the database configuration (see: Finding Informix DB Server )
I downloaded and installed the Informix Client SDK provided by IBM and found that it comes with sample code (for both C# and VB). The path to the samples are C:\Program Files\IBM Informix Client SDK\demo\dotnetdemo\quickstart\cs
Add your connection string to the conninfo.xml file and run the file named helloworldconnect.cs as a console app to test connection. Your results will spit out into a file named "log.txt" (found in the bin/Debug folder).
BTW - I downloaded the 64 bit version of the "IBM Informix Client SDK". Trying to run it gave me "BadImageFormatException" so i had to switch my Platform Target to x64.
The SDK readme docs say it is IBM Informix .NET Provider Version 4.10.FC5 released on March 26, 2015. This link should give you a list of Windows 64 bit drivers (you will need to create an IBM account to download). On this page you can change the filter settings (top of page) to get other operating systems.
Whew.. now onto pulling data!
One more thing.. this book "IBM Informix Developer's Handbook" (https://play.google.com/books/reader?id=eprEAgAAQBAJ ) is a great resource and its free!
I have a freshly built 64-bit Windows Server 2008 R2 box that I have installed 64-bit Coldfusion 9 Standard on. I've upgraded and hotfixed it up to the most current version of CF. I also had 64-bit Oracle 11g (11.1.0.7.0) Client installed on the box. I've created a System DSN using the 64-bit ODBC Data Source Administrator in Windows and can successfully test the connection of the data source.
All of these installations went smoothly, however, when I went to add a datasource in the Coldfusion Administrator I receive the error:
Connection verification failed for data source: myDatabaseName
java.sql.SQLException: [Macromedia][SequeLink JDBC Driver][ODBC Socket]internal error: The specified DSN contains an architecture mismatch between the Driver and Application
The root cause was that: java.sql.SQLException: [Macromedia][SequeLink JDBC Driver][ODBC Socket]internal error: The specified DSN contains an architecture mismatch between the Driver and Application
I am having a hard time understanding exactly where this architecture mismatch is coming from since the box is entirely 64-bit. I see while looking at all the processes that are running, some related CF processes are running in 32-bit (Verity related processes, SOLR and CFDotNetSVC). I am not sure if those could cause this issue but I am at a loss to explain were this mismatch would come from otherwise.
Anyone have any ideas?
Using Dan's advice I grabbed a JDBC Driver from Oracle here:
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-111060-084321.html
I then moved the JAR (ojdbc6.jar in my case) and added it to my Coldfusion Class Path.
Determining the correct settings for using the datasource to Coldfusion was slightly harder but here are the settings I ended up going with:
JDBC URL: jdbc:oracle:thin:#//dbsrv.mydomain.com:1521/myDB.world
Driver Class: oracle.jdbc.driver.OracleDriver
Driver Name: Oracle Thin Driver
Then the username and password for the DB.
Sure enough it worked like a charm.
Dan, I want to give you a check mark because you definitely put me in the right direction, but I can only mark one correct.
I believe you need to either step down to the 32-bit drivers, or use native JDBC drivers to connect to Oracle successfully. My suggestion would be to go the JDBC route, and connect directly through a native Oracle JDBC driver by using the "other" selection on the Datasource screen. You'll get better performance that way, and have more control over your connection via ColdFusion.
Connecting to Oracle information in ColdFusion Livedocs.
i found an alternate way to do this
install the ODBC drivers for 64bit and 32bit (in that order) on your win2008 64bit OS
thereafter create the DSNs on both the System32 folder and SysWow64 folder by running the odbc32ad32.exe
ensure your tnsnames are setup fine in the respective network/admin folder (if you use tnsnames to maintain your sids)
now on the CF admin you creaet a new ODBC source with aODBC Socket and name. the next page should show you a drop down of all DSNs that exists in the 64bit DSN setup. When you go and test it in CF, it will strangely use the config of the 32bit DSN setup for validationb
voila....your connections should work. No worries of those architectural failures etc
We needed to setup 64 bit ODBC connections for a ColdFusion 11 server to query against 2012 SQL Server instance on Windows 2008 R2 Server. The ODBC connections would show up but would never work. We received so many various messages when verifying such as "needing SSL connections to work" and also timeout messages as it was having problems logging into SQL Server.
I stumbled across this post and we decided to follow setting up 64bit ODBC connections and then effectively overwriting them--preserving the name using the 32bit ODBC. Thank you again fellow developers, especially Souzam! My instructions are below:
For Windows 2008R2 Server you must disguise 64bit ODBC socket configurations for 32 bit in order for them to appear in CF Admin as datasources (obvious bug in CF 11):
Creating 64bit ODBC connections via 2008 R2 ODBC application, follow a naming convention that will allow you to recall in 32 bit configuration.
Configure ODBC 32bit connection in SYSWOW64 (C:\Windows\SysWOW64) using the odbcad32.exe using the previous 64bit names in Step #1.
Create data sources in CF Admin as these should appear in a dropdown when creating ODBC Socket Type connections.