简体   繁体   中英

Microsoft OLE DB Provider for SQL Server error '80004005'

I have migrated a classic ASP site to a new server and am getting the following error, message.

I have tried different connection strings but none of them work.

I am not even sure if the connection string is the problem

The new server is a Windows 2012 Server, SQL Server 2008 R2 Express machine.


Microsoft OLE DB Provider for SQL Server error '80004005'

[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied.

/scripts/dbcode.asp, line 31 

Application("C2M_ConnectionString") = "Provider=SQLNCLI10;Server=(local);Database=mysite_live;Uid=mysitec_Live;Pwd=mypass;"

If it is an Express instance, it is most likely not a default instance, but rather a named instance. So you probably meant:

... "Provider=SQLNCLI10;Server=.\SQLEXPRESS; ...
--- instead of just (local) ---^^^^^^^^^^^^

Otherwise you'll need to show us the server properties in SQL Server Configuration Manager on that machine in order for us to be able to tell you how to correct your connection string.

As Aaron Bertrand mentioned it would be interesting to have a look at your connection properties (In Sql Server configuration check if the following are enabled Name Pipes and TCP/Ip). Since you're able to connect from SSMS i would ask to check if the Remote connection is allowed on that server Also can you tell is the Sql browser service is running?

here is a link that i keep close to me as a reminder or check list on probable connection issues on SQL Server. Sql Connection Issues And lastly can you try as provider "SQLNCLI" instead of "SQLNCLI10"

Try pinging the server in your connection string. The server your application resides on should be able to communicate on the port you specify by credentials. If you are developing locally try specifying "localhost". If the server is clustered or you installed as an instance then you need to specify that instance. Also make sure the server is configured for mixed-mode authentication if using sql credentials.

OR Try

Data Source=localhost;Initial Catalog=DBNAME;Persist Security Info=True;User ID=MyUserName; Password=MyPassword;

It can be a permission issue , Please check is that server is connecting with same configuration detail from SQL management. other is username / password is wrong.

Here is what I would do:

EDIT: Note that this SO post , a few down, has an interesting method for creating the correct connection string to use.

  1. Open SSMS (Sql Server Management Studio) and copy/paste the username/password. Don't type them, copy/paste. Verify there isn't an issue.
  2. Fire up the code (this is next for me b/c this would be the next easiest thing to do in my case) and step to line 31 to verify that everything is setup properly. Here is some info on how to do this. I understand that this may be impossible for you with this being on production so you might skip this step. If at all possible though, I'd set this up on my local machine and verify that there is no issue connecting locally. If I get this error locally, then I have a better chance at fixing it.
  3. Verify that Provider=SQLNCLI10 is installed on the production server. I would follow this SO post , probably the answer posted by gbn.
  4. You have other working websites? Are any of them classic asp? Even if not, I'd compare the connection string in another site to the one that you are using here. Make sure there are no obvious differences.
  5. Fire up SQL Server Profiler and start tracing. Connect to the site and cause the error then go to profiler and see if it gives you an additional error information.
  6. If all of that fails, I would start going through this .

Sorry I can't just point to something and say, there's the problem!

Good luck!

In line 31:

cmd.ActiveConnection = Application("C2M_ConnectionString")

How are you instantiating cmd ?

Rather than the ConnectionString being wrong, maybe cmd is acting differently in the new environment.

Edited to add:

I see that you've gone from IIS 7 to IIS 8. To run Classic ASP sites on IIS 7 required manual changes to server defaults, such as "allow parent paths." Is it possible that some of the needed tweaks didn't get migrated over?

If you're not running with Option Strict On, you should try that - it often reveals the source of subtle problems like this. (Of course, first you'll be forced to declare all your variables, which is very tedious with finished code.)

Have you ever tried SQL Server OLE DB driver connection string:

"Provider=sqloledb;Data Source=(local);Initial Catalog=mysite_live;User Id=mysitec_Live;Password=mypass;"

or ODBC driver:

"Driver={SQL Server};Server=SERVERNAME;Trusted_Connection=no;Database=mysite_live;Uid=mysitec_Live;Pwd=mypass;"

At least this is what I would do if nothing helps. Maybe you will be able to get more useful error information.

Could this be a x86/x64 thing?

The following thread seems to indicate that the (local) alias is a 32-bit alias which fails on 64-bit server: http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/c701d510-90e5-4dd0-b14f-ca1d694d6615 (note that the error is exacly what you had)

When you were testing the .udl on the server did you test both x86 and x64?

Following the advice from this blogpost ( http://blogs.msdn.com/b/farukcelik/archive/2007/12/31/udl-test-on-a-64-bit-machine.aspx ) you could test your local udl :

  • in 64-bit by just double clicking it (acts the same as running "C:\\Program Files\\Common Files\\System\\Ole DB\\oledb32.dll",OpenDSLFile C:\\\\test.udl
  • in 32-bit by double running C:\\Windows\\syswow64\\rundll32.exe "C:\\Program Files (x86)\\Common Files\\System\\Ole DB\\oledb32.dll",OpenDSLFile C:\\\\test.udl

If you can confirm it's a problem with the alias I'd suggest you create a new one by following the guidelines found here: http://msdn.microsoft.com/en-us/library/ms190445(v=sql.105).aspx

Have you tried to use the server IP address instead of the "(local)"? Something like " Server=192.168.1.1; " (clearly you need to use the real IP address of your server)

In case you try to use the server IP address, check in the " SQL-Server configurator " that SQL Server is listening on the IP address you use in your connection. ( SQL Server Configurator screenshot )

Other useful thing to check / try:

  • And check also if the DB is in the default SQL Server instance, or if it is in a named instance.
  • Do you have checked if the firewall have the TCP/IP rule for opening the port of you SQL Server?
  • Have you tried to connect to SQL Server using other software that use the TCP/IP connection ?

The SQL Server Browser service is disabled by default on installation. I'd recommend that you enable and start it. For more information, see this link and the section titled "Using SQL Server Browser" for an explanation of why this might be your problem.

If you don't wish to enable the service, you can enable TCP/IP protocol (it's disabled by default), specify a static port number, and use 127.0.01,<port number> to identify the server.

Step-1: Enabling TCP/IP Protocol Start >> All Programs >> Microsoft SQL Server >> Configuration Tools >> SQL Server Configuration Manager >> SQL Server Network Configuration >> Protocols for MSSQLSERVER >> right click “TCP/IP” and select “Enable”.

Step-2: change specific machine name in Data Source attributes'value to (local) will resovle the problem ni SQL SERVER 2012.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM