[egenix-users] Invalid cursor state

Dan Fairs dan.fairs at gmail.com
Wed Jul 22 10:24:25 CEST 2009


>>
>> - Cause a row to be SELECTed from a table
>> - UPDATE the same row
>> - SELECT that same row again
>
> Are you using the ZSQL method from different threads ?
>

No, these are in the same request; therefore the same thread.

> I assume you are running the UPDATE using a different ZSQL method,
> right ?

That's correct.

(We do have ZSQL methods that do an UPDATE and then immediately SELECT  
the newly-updated data out, incidentally; however, the case I'm  
talking about here doesn't do that. Splitting those up was one of the  
stages in our investigation.)

>
> It is possible that the ODBC driver tries to do some optimization
> by keeping the result set and the cursor from the first SELECT
> alive even after the Zope DA has closed it.
>
> This would explain the invalid cursor state, since SQL Server
> does not support multiple active statements on the same connection
> unless you enable the MARS feature available in SQL Server 2005
> and later:
>
> http://msdn.microsoft.com/en-us/library/ms131686.aspx
>
> (you can enable this via a connection parameter "Mars_Connection=on")
>

Ah - now that's interesting. Now you mention it, I do remember MARS  
from my .NET days. Unfortunately the client's servers are only running  
SQL Server 2000; however, we've got 2005 and 2008 dev instances here,  
so we'll try it on those and see if does resolve the issue.

Thanks
Dan

--
Dan Fairs <dan.fairs at gmail.com> | http://www.fezconsulting.com/



More information about the egenix-users mailing list