正在加载...

Adodbapi执行Ms Sqlserver存储过程的问题

June 23rd, 2008

使用adodbapi来访问Sqlserver是Python在windows下访问数据库常用的方法。

今天在使用过程中遇到一个问题,就是如果存储过程里包含了更新语句(如insert,update时),无法取到select出来的数据集,使用fetchall()函数时报错。
追踪了一下代码,发现当存储过程中包含更新语句时,返回的第一个数据集是空的,要第二或第三个才包含数据,而adodbapi中,仅仅判断了第一个数据集,所以会报错。

最后通过修改adodbapi.py中_makeDescriptionFromRS的源代码解决了问题

if (rs == None) or (rs.State == adStateClosed): self.rs=None self.description=None else:

修改为

while(rs!=None and rs.State==adStateClosed): rs=rs.NextRecordset()[0] if (rs == None): #or (rs.State == adStateClosed): self.rs=None self.description=None elif(rs.State==adStateClosed): self.rs=None self.description=None

 

附:使用adodbapi调用sqlserver存储过程

con=adodbapi.connect('ado连接字符串') cur=con.cursor() cur.callproc('sp_xxxx',(arg1,arg2,)) cur.fetchall() con.commit()

相关阅读:



我要留言

麻烦,计算一下:5+8