ODBC drivers >

JDBC drivers >

Bridges, gateways >

Other >

All products

Connect JDBC to any ODBC driver

Connect JDBC to Microsoft Access

Cross-platform or cross-architecture access to any ODBC driver

ODBC access to any JDBC driver

Connect dbExpress applications to any ODBC driver

Connect XML applications to any ODBC driver

Access mutiple ODBC data sources from one SQL statement

Create custom ODBC drivers

Bespoke data access requirements

In the pipeline

Support

Resources

Quick start

Licensing

Knowledge Base

User Guides

Company

About Us

Careers & Partners

Trapping linked server errors

SQL Server provides a TRY CATCH mechanism to enable an application to realise that something has gone wrong and execute appropriate code to handle the problem. For example:

BEGIN TRY
 some code
END TRY
BEGIN CATCH 
 PRINT 'This is the error: ' + error_message()
END CATCH

The code in the TRY block is executed first. If an error occurs, execution is passed to the CATCH block.

What are the implications for error handling if you want to use TRY CATCH with a linked server? In this situation, an error can occur in:

  1. The local SQL Server instance.
  2. The SQL Server interface used to facilitate the connection with the remote server.
  3. The interface used to make the remote server accessible to SQL Server.

Our example setup will use a Salesforce server as the remote server. For this remote server type, interface 2. is the Microsoft OLE DB Provider for ODBC Drivers and interface 3. is Easysoft's Salesforce ODBC driver.

The following error occurs locally in SQL Server. The linked server named SALESFORCE has not yet been created and so SQL Server is unable to locate it:

BEGIN TRY
 EXEC('SELECT * FROM OPENQUERY(SALESFORCE, ''SELECT * FROM LEASE'')')
END TRY
BEGIN CATCH 
 PRINT 'This is the error: ' + error_message()
END CATCH
This is the error: Could not find server 'SALESFORCE' in sys.servers. Verify that
the correct server name was specified. If necessary, execute the stored procedure
sp_addlinkedserver to add the server to sys.servers.

The next error occurs in the Microsoft OLE DB Provider for ODBC Drivers layer. The linked server named SALESFORCE references an ODBC data source that contains the connection details for the target Salesforce server. However, SQL Server is 64-bit but the ODBC data source has been set up in the 32-bit ODBC Data Source Administrator. The connection fails with an "architecture mismatch" error

OLE DB provider "MSDASQL" for linked server "SALESFORCE" returned message
"[Microsoft][ODBC Driver Manager] The specified DSN contains an architecture
mismatch between the Driver and Application".
This is the error: Cannot initialize the data source object of OLE DB provider
"MSDASQL" for linked server "SALESFORCE".

Notice that SQL Server's interpretation of the OLE DB error has been caught by the CATCH block. The "raw" error form the OLEDB layer has not.

This final error occurs in the ODBC layer used to connect to Salesforce. The select query references a custom Salesforce object ("LEASE") that has not yet been enabled and populated. "[Easysoft ODBC]Base table or view LEASE not found" is an error from the ODBC driver, which is passed to and displayed by the Microsoft OLE DB Provider for ODBC Drivers. As in the previous example, this message is not trappable, SQL Server's interpretation of the message is trappable.

OLE DB provider "MSDASQL" for linked server "SALESFORCE" returned message
"[Easysoft ODBC]Base table or view LEASE not found".
This is the error: An error occurred while preparing the query
"SELECT * FROM LEASE" for execution against OLE DB provider "MSDASQL" for linked
server "SALESFORCE".

For more information about SQL Server error handling both with and without linked servers see:

http://www.sommarskog.se/error_handling/Part1.html

Share:

AltStyle によって変換されたページ (->オリジナル) /