问题标签 [ado]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
12919 浏览

asp-classic - 这是什么“多步 OLE DB”错误?

我正在开发一个由班加罗尔最好的软件开发的可怕软件。

它主要是用经典的 ASP/VbScript 编写的,但“移植”到 ASP.NET,尽管大部分代码是 ASPX 页面中的经典 ASP 样式:(

当它尝试连接到我的本地数据库时,我收到此消息:

多步 OLE DB 操作产生错误。检查每个 OLE DB 状态值(如果可用)。没有做任何工作。

有人知道这个错误是什么意思吗?它使用此连接字符串连接到我的本地计算机(运行 SQLEXPRESS):

这是它最初使用的连接字符串,我只是将它重新指向我的数据库。

更新:

问题是在 ADO 中使用“集成安全”。我改为使用用户帐户,它连接得很好。

0 投票
2 回答
1312 浏览

sql-server - VBScript/ASP Classic 和 ADO 中的参数化

我在这里有点困惑。据我所知,微软声称参数化是保护数据库免受 SQL 注入攻击的最佳方式。但我在这里发现了两个相互矛盾的信息来源:

该页面说使用 ADO 命令对象。但是这个页面说命令对象对于脚本来说是不安全的。我似乎记得在某处读过,由于安全漏洞,命令对象不应该在 VBScript 或 JScript 中使用,但我似乎找不到那篇文章。

我在这里遗漏了什么,或者这两篇文章似乎相互矛盾?

0 投票
2 回答
2236 浏览

sql - 在一个事务中更新架构和行,SQL Server 2005

我目前正在更新一个遗留系统,该系统允许用户指定其中一个表的部分架构。用户可以通过此界面在表中创建和删除列。这个遗留系统使用 ADO 2.8,并使用 SQL Server 2005 作为其数据库(在尝试对这头野兽进行现代化改造之前,您甚至不想知道它使用的是什么数据库……但我离题了。=))

在同一编辑过程中,用户可以定义(和更改)可以存储在这些用户创建的字段中的有效值列表(如果用户想要限制字段中可以包含的内容)。

当用户更改字段的有效条目列表时,如果他们删除了其中一个有效值,则允许他们选择一个新的“有效值”来映射其中包含此(现在无效)值的任何行,以便它们现在再次具有有效值。

在查看旧代码时,我注意到它极易使系统进入无效状态,因为上述更改不是在事务中完成的(因此,如果其他人在上述过程的中途出现并进行了他们的自己的变化......好吧,你可以想象可能导致的问题)。

问题是,我一直试图让它们在单个事务下更新,但是每当代码到达它更改该表架构的部分时,所有其他更改(更新行中的值,无论是在架构更改与否的表......它们甚至可以是完全不相关的表)在事务中构成的那一点似乎被静默删除。我没有收到表明它们已被删除的错误消息,并且当我最后提交事务时没有引发错误......但是当我去查看应该在事务中更新的表时,只有新列在那里。所做的任何非架构更改都不会保存。

到目前为止,在网上寻找答案被证明是浪费几个小时......所以我转向这里寻求帮助。有没有人尝试过通过 ADO 执行事务,既更新表的架构又更新表中的行(无论是同一个表还是其他表)?不允许吗?是否有任何文档可以在这种情况下有所帮助?

编辑:

好的,我做了一个trace,这些命令被发送到数据库中(括号中的解释)

(我不知道这里发生了什么,看起来它正在创建一个临时存储过程......?)

(检索包含用户生成字段的定义信息的表)

(我认为我的代码在这里遍历它们的列表,获取当前信息)

(这似乎是我输入定义的修改数据的地方,我遍历每个并更新自定义字段本身的定义中发生的任何更改)

(这是我的代码在此保存开始之前通过界面删除删除的地方] ...据我所知,这也是在此事务期间实际发生的唯一事情)

(现在,如果任何定义被更改为需要更改用户创建的列的属性或需要添加/删除列上的索引,则在此处完成,并为任何行提供默认值给定列还没有值...请注意,据我所知,当存储过程完成时,实际上没有发生这种情况。)

p>

(关闭交易...?)

p>

经过上面的所有这些,只发生了该列的删除。事务中它之前和之后的所有内容似乎都被忽略了,并且 SQL 跟踪中没有消息表明事务期间出现了问题。

0 投票
6 回答
7041 浏览

sql-server - 使用日期参数执行存储过程:命令对象与连接对象

当通过参数向存储过程提供日期时,我对日期使用哪种格式有点困惑。我原来的 VBA 语法使用 ADO Connection 对象来执行存储过程:

使用日期语法这对我来说很好,yyyy-mm-dd但是当另一个用户执行代码时,他们会收到错误:13 'Type Mismatch'。

经过一些实验,我发现以格式提供日期dd/mm/yyyy可以为用户修复此错误,但现在给了我错误!

无论日期格式如何,使用带参数的命令对象执行存储过程都有效(我假设 ADO 正在处理幕后的格式设置)。我认为使用该格式yyyy-mm-dd可以与 SQL Server 通用吗?

我也很困惑为什么这个问题似乎是用户特定的?我注意到我在 SQL Server 上的默认语言是“英语”,而其他用户的默认语言是“英式英语”,这会导致问题吗?

我将 ADO 2.8 与 Access 2003 和 SQL Server 2000 一起使用,SQL Server 登录是通过 Windows 集成安全性进行的。

0 投票
1 回答
499 浏览

ado - 使用 ADO 删除连接表中的行

现在我在另一个论坛上看到了这个问题,但没有一个可以接受的答案。

假设我有两个表,Groups 表和 Elements 表。这些表没有定义的关系。Elements 表有一个 IdGroup 字段,该字段引用 Groups 表的 IdGroup (PK) 字段。

我通过 ADO 记录集使用以下查询将表值填充到数据网格:

从那个网格中,我想按 Delete 键来删除一个元素。这是我的问题。当我使用 DAO 时,DAO Delete() 函数只删除了 Elements 组中的记录。这是预期的行为。

当我更改为 ADO 时,Delete() 函数删除了两个表中的记录,元素记录和元素所属的组!

有没有办法在 ADO 中重现 DAO 行为而不必在表中定义关系?

注意:我知道有其他选择(执行 DELETE 查询可以完成这项工作)。只是告诉我一种在 ADO 中执行此操作的方法,或者说它无法完成。

0 投票
7 回答
31176 浏览

database - 在 VB6 中使用 SQLITE

我目前正在为可再发行应用程序使用 MSAccess mdb 文件。

不久前,我发现了 SQLite,作为我的解决方案的替代方案,但它们提供的二进制文件不提供将它们用作 VB6 中的对象的可能性。(或者至少我无法弄清楚如何)。

有没有人有一个链接,或者可以写一些关于从 VB6 连接到 SQLite DB 的内容,以及它与使用 ADO 的区别?

0 投票
6 回答
63952 浏览

delphi - 如何检查系统上是否安装了 OLEDB 驱动程序?

当我启动我的应用程序时,如何确保安装了某个 OLEDB 驱动程序?我使用 Delphi 的 ADO,如果缺少驱动程序,我想显示描述性错误消息。从 ADO 返回的错误并不总是那么用户友好。

可能有一个不错的小函数可以返回所有已安装的驱动程序,但我还没有找到它。

0 投票
2 回答
6315 浏览

vba - 将 ADO 记录集文本字段排序为数字

使用 VBA,我有一组函数返回ADODB.Recordset所有列作为adVarChar. 不幸的是,这意味着数字被排序为文本。所以 1,7,16,22 变成 1,16,22,7

是否有任何方法可以将数字作为文本列进行排序,而无需更改列的类型?

注意:我正在使用 Project 2003 和 Excel 2003 并引用Microsoft ActiveX DataObject 2.8 库

0 投票
2 回答
9675 浏览

iis - IIS 连接池询问/泄漏跟踪

根据这篇有用的文章,我已确认在运行 W2k3 的 IIS 6 服务器上的某些应用程序中存在连接池泄漏。

困难的部分是,我在 6 个应用程序池中为 700 名开发人员编写的 300 个网站提供服务,其中 50% 是 .NET 1.1,它甚至没有在 CLR 数据性能计数器中显示连接。如果一切都是 .NET 2.0+,我可以看到连接不断增长,但我什至对那个纤薄的监控工具都不走运。

我的 300 个网站连接到分布在 Oracle、SQLServer 和异常值之间的大概 100 多个数据库,所以我也无法看到来自数据库端的连接。

现在我最好也是唯一的计划是对我最严重的违规者进行松散的二进制搜索。我将杀死应用程序池并慢慢地从其中删除应用程序,直到我找到在我杀死它们的池时哪些单个应用程序导致最多连接断开。但由于这是一个生产箱,我喜欢继续工作,作为一种追踪方法,这可能需要数周时间。

有谁知道询问 IIS 连接池以了解其来源或所有者的方法?是否有一个我可以在创建时附加的 MSMQ 触发器?我忽略了什么愚蠢的事情?

凯文

(我将包含错误代码以方便其他人通过搜索找到您的答案:异常:System.InvalidOperationException 消息:超时已过期。在从池中获取连接之前已经过了超时时间。这可能是因为所有池连接都在已达到使用和最大池大小。)

0 投票
5 回答
1689 浏览

ms-access - 如何通过 ADO 打开 Access DB 以便我可以写入,而其他人只能读取?

从文档中,我希望 adModeShareDenyWrite 成为方式,但它不能正常工作。

我正在通过 ADO 使用 Access 数据库。我的连接字符串显示 Mode=8,即 adModeShareDenyWrite。但是当我尝试从表中删除一行时,我得到:

未指定的错误,描述:无法从指定的表中删除。,来源:Microsoft JET 数据库引擎

换句话说,该设置阻止我使用我的 OWN 连接更新数据库。

我在网上发现了一些其他帖子报告了同样的事情,与 Access 一起使用的 adModeShareDenyWrite 设置没有按文档说明工作。

我正在寻找不涉及管理员更改权限的解决方案。它必须是我的程序可以控制的东西。

我的动机是尽量减少数据库损坏的机会。Microsoft 记录的 mdb 文件损坏的原因之一是两个应用程序写入同一个数据库。所以,我想确保只有一个应用程序可以与数据库建立写连接。其他人可以阅读,但在尝试写入时应该会失败。谁先建立联系,谁就赢了。