by 清泉
6. 十二月 2008 18:16
在存储过程的as语句后加上一句set nocount on就可以了
问题得以解决现总结如下:
要在每个Insert语句之前都加一句set nocount on 也就是在游标循环里面加一句
1。
set RecvSMsg=Server.CreateObject("ADODB.Recordset")
sql="Exec sp_GetDeliverMsg "&Replace(Session("MM_UserMSISDN"),"'","''")
RecvSMsg=conn.Execute(sql)
2。
set rsComm=Server.CreateObject("ADODB.Command")
set RecvSMsg=Server.CreateObject("ADODB.Recordset")
RecvSMsg.CursorLocation = 3
RecvSMsg.LockType = 3
RecvSMsg.CursorType = 3
conn.CursorLocation = 3
rsComm.ActiveConnection = conn
rsComm.CommandText = "dbo.sp_GetDeliverMsg"
rsComm.CommandType = 4
rsComm.CommandTimeout = 0
rsComm.Prepared = true
rsComm.Parameters.Append
rsComm.CreateParameter("@Destnation_id", 200, 1,11,Replace(Session("MM_UserMSISDN"),"'","''"))
set RecvSMsg=rsComm.Execute()
nCount=RecvSMsg.RecordCount 俩处均会报错
1。2。种方式均能够得到正确结果;方式2种的RecvSMsg.CursorLocation = 3似乎可有可无 如果注释掉conn.CursorLocation=3和RecvSMsg.CursorLocation = 3则报以下错 Microsoft OLE DB Provider for SQL Server 错误 '80040e21' 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。 conn.CursorLocation=3和RecvSMsg.CursorLocation = 3可以只取其一 set RecvSMsg=rsComm.Execute()和RecvSMsg.open rsComm,, 3, 1方式均可