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()