Search code examples
ssisdbf

SSIS dBase data source - "Opening a rowset for "x" failed. Check that the object exists in the database"


I'm trying to load some data from a dBase file with SSIS. I've never worked with dBase. The files are created by a third party application.

The database contains one table, C:\dbf\exceptions.dbf

In SSIS, I've created a Microsoft Jet 4.0 OLE DB Provider, put in C:\dbf as the file name, put in dBASE III for the extended properties (the first byte of the file is 0x03 which indicates III accoring to this). The connection tests fine.

I then try to add an OLE DB source, using that connection manager. When I click on the Name of the table or the view: dropdown, it correctly populates Exceptions as the only table. If I select it and hit preview, I get

Exception from HRESULT: 0xC02020E8
Error at ETL Exceptions [OLE DB Source [1]]: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80040E37.

Error at ETL Exceptions [OLE DB Source [1]]: Opening a rowset for "exceptions" failed. Check that the object exists in the database.

I can open the exceptions.dbf file in DBF Viewer 2000 without any issue.

As far as I know there aren't any credentials that need to be entered (DBF Viewer 2000 doesn't ask for any, and I can update rows without issue), but the connection manager insists on filling in Admin for the username.

Update: according to DBF Viewer 2000, the file type is FoxBase+/dBASE III PLUSE, no memo

Update 2 I tried opening some of the other tables the application generates. Some open, some give that error.

Connection Manager

OLE DB Source

Eror


Solution

  • I've found a workaround. By changing the provider to Microsoft OLE DB Provider for Visual FoxPro, entering the directory path, and leaving everything else default, I can now open the table. I now get the warning:

    The component reported the following warnings:

    Warning at {FBAE0F44-DE41-4862-8C53-228C63D87A01} [OLE DB Source [1]]: Cannot retrieve the column code page info from the OLE DB provider. If the component supports the "DefaultCodePage" property, the code page from that property will be used. Change the value of the property if the current string code page values are incorrect. If the component does not support the property, the code page from the component's locale ID will be used.

    Choose OK if you want to continue with the operation.

    Choose Cancel if you want to stop the operation.

    Which is perfectly acceptable since we're all about the 1252.