Jay Desai
Jay Desai

Reputation: 11

SQL CE connection with Python

Problem Statement: Extract data stored in the .sdf file to python. System config: Win 10 Pro 64-bit, python 3.5.2-64 bit, adodbapi library, SQL CE 3.5

I am fairly new to programming and I have picked up Python as my first language to learn. Currently, I have hit a wall in process of connecting a SQL CE 3.5 .sdf file.

I have used the adodbapi library. I have searched the web extensively over the past week to find a solution to this problem and to make sure that my connection string is correct. I have tried multiple options/solutions provided on stack overflow and https://www.connectionstrings.com/microsoft-sqlserver-ce-oledb-3-5/.

Code:

import adodbapi

cons_str = "Provider=Microsoft.SQLSERVER.MOBILE.OLEDB.3.5;" \
           "Data Source=D:\Work\Programming\Python\SQL_DataTransfer\LF.sdf;"\
           "Persist Security Info=False;" \
           "SSCE:Max Database Size=4091"

connection = adodbapi.connect(cons_str)
print(connection)

Error Message:

Traceback (most recent call last):

File "D:\Work\Programs\Python35.virtualenvs\sql_output\lib\site-packages\adodbapi\adodbapi.py", line 93, in make_COM_connecter c = Dispatch('ADODB.Connection') #connect after CoIninialize v2.1.1 adamvan NameError: name 'Dispatch' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

File "D:\Work\Programs\Python35.virtualenvs\sql_output\lib\site-packages\adodbapi\adodbapi.py", line 112, in connect co.connect(kwargs) File "D:\Work\Programs\Python35.virtualenvs\sql_output\lib\site-packages\adodbapi\adodbapi.py", line 269, in connect self.connector = connection_maker() File "D:\Work\Programs\Python35.virtualenvs\sql_output\lib\site-packages\adodbapi\adodbapi.py", line 95, in make_COM_connecter raise api.InterfaceError ("Windows COM Error: Dispatch('ADODB.Connection') failed.") adodbapi.apibase.InterfaceError: Windows COM Error: Dispatch('ADODB.Connection') failed.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

File "D:/Work/Programming/Python/SQL_DataTransfer/SQL_CE_reportDB.py", line 8, in connection = adodbapi.connect(cons_str) File "D:\Work\Programs\Python35.virtualenvs\sql_output\lib\site-packages\adodbapi\adodbapi.py", line 116, in connect raise api.OperationalError(e, message) adodbapi.apibase.OperationalError: (InterfaceError("Windows COM Error: Dispatch('ADODB.Connection') failed.",), 'Error opening connection to "Provoider=Microsoft.SQLSERVER.MOBILE.OLEDB.3.5;Data Source=D:\Work\Programming\Python\SQL_DataTransfer\LF.sdf;Persist Security Info=False;SSCE:Max Database Size=4091"')

At this point any help is much appreciated.

Thank you, Sincerely, JD.

Upvotes: 1

Views: 3524

Answers (2)

Rex87
Rex87

Reputation: 11

adodbapi version = '2.6.0.6' depends on pypiwin32 to be installed in your Python environment. For adodbapi.py, from line 51:

if api.onIronPython:
    from System import Activator, Type, DBNull, DateTime, Array, Byte
    from System import Decimal as SystemDecimal
    from clr import Reference
    def Dispatch(dispatch):
        type = Type.GetTypeFromProgID(dispatch)
        return Activator.CreateInstance(type)
    def getIndexedValue(obj,index):
        return obj.Item[index]
else: # try pywin32
    try:
        import win32com.client
        import pythoncom
        import pywintypes
        onWin32 = True
        def Dispatch(dispatch):
            return win32com.client.Dispatch(dispatch)
    except ImportError:
        import warnings
        warnings.warn("pywin32 package (or IronPython) required for adodbapi.",ImportWarning)
    def getIndexedValue(obj,index):
        return obj(index)

In my situation, I traced the fact that the Dispatch function was not defined because an ImportError exception is generated at line 62, (import win32com.client) caught in the except block but for some reason the warning message was not displayed in my console.

Try:

pip install pypiwin32

and the ImportError exception described above should not be raised anymore.

Upvotes: 1

ErikEJ
ErikEJ

Reputation: 41799

Looks like you have a typo:

Provoider => Provider

Upvotes: 1

Related Questions