[IronPython] How do I determine whether a database supports transactions?

Curt Hagenlocher curt at hagenlocher.org
Thu Aug 21 07:52:54 CEST 2008


If Properties is a COM enumerator, then I seem to recall that indexing may
need to go through something like an "Item" method in Properties -- that is,
"Properties.Item(index)" instead of "Properties(index)".  Alternatively,
have you tried doing "Properties[index]" instead?

In the long term, I think you're definitely better off rewriting against
ADO.NET, but I can certainly see the attraction in getting something to work
more quickly if you can continue to use the COM ADO objects.

On Tue, Aug 19, 2008 at 5:58 PM, Vernon Cole <vernondcole at gmail.com> wrote:

> Hello all.
>   I am the present maintainer of adodbapi, a pure python module which uses
> ADO-DB to access SQL databases. (see adodbapi.sourceforge.net) It has been
> my stated goal for some time to port the package to Iron Python, since it is
> fully DB-API_2.0 compliant, and the existing SQL access library samples for
> ipy are relatively light weight.
>
> The present implementation works only in CPython and depends on pywin32 to
> make COM calls to access ADO. I originally thought that I would replace all
> of the COM interface with ADO.NET calls, but someone suggested that it
> would be less rewriting to call COM from ipy, too.
> <comments about the wisdom of this are welcome.>
>
> I could use some help with my present snag.
>
>    In the snippet below (which works in CPython) the Properties attribute
> of the dispatch object is completely different between the two
> implementations. I notice, when I do a dir(adoConn), that ipy shows two
> different attributes called "Properties" , so perhaps the other one has the
> interface I want, if I knew how to get at it. I didn't write this code so I
> don't know how or why it works, but it is used to see whether a particular
> database supports rollback and commit.
>
>   What alternate code could I use to aviod calling adoConn.Properties(indx)
> as a method?
>
> #begin snippet .........
> try:
>     import win32com.client
>     def Dispatch(dispatch):
>         return win32com.client.Dispatch(dispatch)
>     win32 = True
> except ImportError:  #perhaps running on IronPython
>     from System import Activator, Type
>     def Dispatch(dispatch):
>         type = Type.GetTypeFromProgID(dispatch)
>         return Activator.CreateInstance(type)
>     win32 = False    #implies IronPython
>
> def connect(connstr, timeout=30):
>     "Connection string as in the ADO documentation, SQL timeout in seconds"
>     conn=Dispatch('ADODB.Connection')
>     conn.CommandTimeout=timeout
>     conn.ConnectionString=connstr
>     conn.Open()
>     return Connection(conn)
>
> class Connection:
>     def __init__(self,adoConn):
>         self.adoConn=adoConn
>         self.supportsTransactions=False
>         for indx in range(adoConn.Properties.Count):  ### iron py errors on
> the next line
>             if adoConn.Properties(indx).Name == 'Transaction DDL' \
>             and adoConn.Properties(indx).Value != 0:
>                 self.supportsTransactions=True
>         self.adoConn.CursorLocation = defaultCursorLocation
>         if self.supportsTransactions:
>             self.adoConn.IsolationLevel=defaultIsolationLevel
>             self.adoConn.BeginTrans() #Disables autocommit
>         self.messages=[]
> #end snippet ......
>
> My resulting stack trace ends with:
>   File "C:\Program Files\IronPython 2.0
> Beta4\lib\site-packages\adodbapi\adodbapi.py", line 264, in connect
>   File "C:\Program Files\IronPython 2.0
> Beta4\lib\site-packages\adodbapi\adodbapi.py", line 317, in __init__
> TypeError: __ComObject is not callable
> ---
> Any suggestions are welcome.
> --
> Vernon Cole
>
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20080820/69044cab/attachment.html>


More information about the Ironpython-users mailing list