LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

在 SQL Server 的 select 查询中出现以下错误提示,是否和 rs.open sql,conn,1,1 中后两个参数为 1,1 有关:多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。

admin
2026年10月15日 15:13 本文热度 201

:在 SQL Server 的 select 查询中出现以下错误提示,是否和 rs.open sql,conn,1,1 中后两个参数为 1,1 有关:

多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。


先说结论

这个报错【多步 OLE DB 操作产生错误】确实有一部分场景和 rs.open sql,conn,1,1(游标类型 1,锁定类型 1)相关,但绝大多数情况并不是这两个参数直接导致,只是刚好在这种游标模式下更容易暴露出来。

rs.open sql,conn,1,1 拆解(ADO Recordset)

  • 第 3 参数 CursorType = 1 → adOpenKeyset 键集游标

  • 第 4 参数 LockType = 1 → adLockReadOnly 只读锁定


一、什么时候是 1,1 这组参数引发 / 诱发这个报错?

  1. 查询语句里有长文本、ntext/text、大字段、XML、超大 varchar (max) adOpenKeyset(1)这种服务器端游标,处理大字段很容易出「多步 OLE DB 错误」; 换成客户端游标 + adOpenForwardOnly 经常直接消失:
  2. conn.CursorLocation = 3 'adUseClient 客户端游标,非常关键!
    rs.Open sql, conn, 0, 1
    
  3. 存储过程、复杂联合查询、派生表、DISTINCT、GROUP BY + 大字段混合,服务器端键集游标对结果集支持差,OLE DB 驱动无法完整拿到行数据,就报这个错。

重点:1,1 本身语法合法,不是参数写错,是游标模式和你的 SQL 结果集不兼容。

二、更多更常见的原因(比游标参数概率更高,优先排查)

这个错误是经典 ADO + SQL Server(SQLOLEDB / SQLOLEDB.1 老驱动)的坑:

  1. 字段存在 NULL,同时是大字段(text/ntext/image),老 OLE DB 驱动读取大字段 NULL 极易报这个;

  2. SQL 里 SELECT *,表里面包含 text, ntext, image 废弃类型(不是 varchar (max)/nvarchar (max));

  3. 字段名称冲突、别名重复、多表 JOIN 后列名重名;

  4. 连接串用的是老旧 SQLOLEDB 驱动,不是 SQLNCLI11(SQL Native Client 11)、MSOLEDBSQL(微软新 OLE DB 驱动);

  5. 记录集为空、但是你强行读取 rs("大字段");

  6. 数据库字段有损坏、计算列、触发器影响读取;

  7. ASP 经典 + 64 位环境下,32 位 SQLOLEDB 驱动缺失 / 不匹配(非常高频,你是 ASP 经典环境大概率踩这个)。

三、快速排查顺序(ASP 经典,ADO)

方案 1:优先改游标位置(最有效,优先试)

Set conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
conn.Open "你的连接串"
conn.CursorLocation = 3 'adUseClient 客户端游标,放到open之前
rs.Open sql, conn, 0, 1 '向前只读游标,最稳定

很多时候,同样一条 SQL,1,1 报错,改成客户端游标 + 0,1 直接正常。

方案 2:先简化 SQL,定位是不是大字段问题

不要 select *,逐个去掉 text/ntext 字段测试,如果去掉就正常 → 实锤是老驱动读取大字段 bug,不是你 SQL 逻辑错。

  • 旧 text/ntext 尽量改成 NVARCHAR(MAX);

  • 如果暂时不能改表结构:读取的时候不要直接 rs("xxx"),或者改用 GetChunk。

方案 3:更换 OLE DB 驱动(根治方向)

❌ 老旧(极易出这个错):

Provider=SQLOLEDB.1

✅ 推荐 SQL Server 2008 及以上:

Provider=SQLNCLI11;Data Source=xxx;Initial Catalog=xxx;User ID=xxx;Password=xxx

✅ 新版 MSOLEDBSQL(SQL Server 2012+)

Provider=MSOLEDBSQL;...

注意:64 位系统跑 32 位 ASP,必须安装32 位版本的驱动,否则驱动加载异常也会报同类 OLEDB 错误。

四、补充区分

  • 如果改成 conn.CursorLocation=3 + rs.open sql,conn,0,1 立刻不报错:根源就是服务器端键集游标 (1) 不兼容当前结果集,也就是和你原来 1,1 的游标参数有关;

  • 改完游标依然报错:和 1,1 参数无关,是字段、驱动、数据本身问题。

五、小提醒

adOpenKeyset(1) 适合需要可滚动、只读的场景,代价就是对复杂结果集、大文本兼容性差;ASP 常规列表查询,绝大多数场景根本不需要键集游标,直接客户端游标 + 0,1 是行业稳妥写法。


该文章在 2026/10/15 15:13:56 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-2  粤公网安备44030602007207号