[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