问题标签 [sqloledb]

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 投票
1 回答
847 浏览

sql-server-2008 - 如何防止 ADO 更改我的 SQL 命令文本?

我正在MERGE针对 SQL Server 2008 R2 数据库(处于 2008 兼容模式)运行语句。

确切的合并语句 SQL 无关紧要,但这里是 MERGE 语句的示例:

从 SSMS 或运行 Windows 7 的客户端 PC 执行此语句时,它会正确执行。

但是,当我的软件在 Windows XP 或 Windows Server 2003 R2 的客户端 PC 上运行时,sqlCommandText在到达服务器之前被更改。在 SQL Server Profiler 中,我可以看到正在执行的 SQL 是:

哪个不是有效的 SQL,SQL Server 会抛出错误:

您可以通过尝试对 SQL Server 2008 R2 数据库执行它来确认它是无效的 SQL。

Peter Boulton 在 Microsoft 论坛上报告了同样的问题:

SQL MERGE 语法适用于 Win7 SP1 客户端,但在早期平台上失败

我相信 ADO 在将 SQL 发送到服务器之前会对其进行解析。针对 Win7 SP1 和 WinServer 2008 R2 更新了数据访问组件。但是,我相信 XP SP3 的数据访问组件早于 SQL Server 2008。

这就是 SQL 在 Win7 SP1 上工作但在 XP 上不行的原因。

的“解决方案”是将 SQL 包装在一个中,EXEC以便 ADO 允许它通过,如下所示:

EXEC('合并....等')

他的技巧当然有效,改变:

进入

但我想提出真正的解决方案。我不知道链中的谁负责更改我的命令文本:

ADO -> OLEDB -> SQLOLEDB -> SQL Server

但我希望他们停下来。

我如何通过 ADO 指定我的命令文本,并且让 SQLOLEDB 不修改它?

现在我的代码是1

我没有看到任何ExecuteOptionEnum,或者CommandTypeEnum告诉 ADO 和底层提供者,将文本视为原始的。


现在修复黑客是:

使用修改后的助手:

更新:更好的解决方法黑客

与其将整个语句包装在 中EXEC(...),我发现击败 ADO 的一个更安全的技巧是在语句之​​前加上注释。即使是空的评论也可以:

实际上,您需要一些文本来解释空注释行对于使查询正常工作至关重要:

0 投票
1 回答
1783 浏览

vbscript - 连接到数据库时使用变量的vbscript

我正在尝试使用变量将数据库的用户名和密码存储在受密码保护的程序中,将它们作为参数传递,然后在 VBScript 中将它们用作将信息发送到数据库的参数。这将防止用户看到保护数据库的用户名和密码,并允许他们篡改它。

当我在 VBScript 中有用户名和密码时,它工作正常。

strConnect = "PROVIDER=sqloledb.1;Data Source=myDatabase;Initial Catalog=myGroup;User ID=JoeSmith;Password=twinkles324"

但是,当我将它们作为参数发送到 VBScript、接受它们作为参数并尝试连接时,我收到 80040E4D 错误,指出“用户'用户名'登录失败”。

谁能帮我弄清楚为什么我不能使用变量连接到数据库?

0 投票
1 回答
40 浏览

sqloledb - 将 ID 排序为 ASC 和 Zip 的 SQL 查询不得重复

我有一个这样的 SQL 语句:

现在我希望 ZIP 对于 100 个结果与 1 个这样的查询语句不同(而不是 dup)。

0 投票
0 回答
767 浏览

sql-server - Crystal 报告未将已调整大小的 nvarchar 字段重新映射为 nvarchar(max)

我有一个 Crystal Report,它通过 SQLOLEDB 提供程序连接到 SQL Server 数据库。

报告中引用的某些列已在基础 SQL Server 数据库中从设置的 nvarchar 大小调整为 nvarchar(max)。

在验证报表时,Crystal Reports 2008 SP3 看不到要重新映射的列,并且该列不再出现在可用于映射的表的列列表中。

我还使用 Crystal Reports 13_0_10 在 Visual Studio 2013 中对此进行了测试,并且观察到了相同的行为。

我能看到的唯一解决方案是记下报告上的物理位置,验证数据库(删除列)然后将列重新添加到同一位置的报告中(这将证明非常耗时)。

有没有更简单的方法来完成这项任务?我本来希望更新版本的 Crystal 能够处理这个问题。

0 投票
2 回答
1106 浏览

sql - 数据库到数组

我正在尝试编写一个从表中获取一组数据的 VBScript UFT 测试(它将是 100 条记录)。正如您从下面的查询中看到的那样,我只会选择一列。

我能够让第一条记录显示在消息框中,但我只是将其作为测试。我现在要做的是将每条记录添加到一个数组中,以便稍后循环它们以更改 WebEdit 文本框的值。

以下是我当前的代码,但我很难弄清楚这一点。

我假设遍历返回的记录会起作用。

0 投票
1 回答
3221 浏览

sql-server - 从 Excel vba 中的 SQL Server 数据检索/创建记录集

我想在 Excel vba 中从 SQL Server 访问/检索/创建记录集。

我尝试了以下方法,但它们返回错误。

代码 1:

在该行conn.Open sConnString发生错误:

无效的授权规范

代码2:

它抛出一个错误

无法生成 SSPI 上下文

0 投票
1 回答
618 浏览

vbscript - SQLNCLI11 提供程序 SQL Server 2012 不支持命令方言

我们使用的是经典的 ASP 和 SQL Server 2012 标准版。

我们的连接字符串如下

我们正在使用 SQLOLEDB 提供程序,它在我们的应用程序中运行良好。当我们尝试将提供程序更改为 SQL Native 客户端(SQLNCLI 11)时,它抛出了错误

SQLNCLI11 提供程序 SQL Server 2012 不支持命令方言

在下一行

0 投票
1 回答
242 浏览

sql-server - 数据库连接适用于 SQL Server 2008 R2,但不适用于 SQL Server 2014

我必须使用经典 ASP 更新一个非常旧的站点,SQLOLEDB但使用 SQL Server 2014 无法连接到 SQL Server。

它适用于使用 SQL Server 2008 R2 的客户端,但不适用于使用 SQL Server 2014 的我。

显而易见的答案是在本地安装 SQL Server 2008 R2,但是整个安装过程可能需要相当长的时间。

是否有一些我缺少的 SQL Server 2014 设置?

这是我的连接字符串:

我得到的错误是:

用于 SQL Server 错误“80004005”的 Microsoft OLE DB 提供程序

[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或访问被拒绝。

我可以使用带有该密码和用户的 SQL Server Management Studio 连接到该服务器。如果实例是 SQL Server 2008 R2,则该连接字符串可以正常工作。所以2014和2008 R2肯定是有区别的。

0 投票
1 回答
390 浏览

c# - 如何传递 DataTable 以查看 JSON/XML 代码?

我是 .NET 环境的新手,正在尝试编写一个简单的 MVC 应用程序来读取学生数据并将其显示给最终用户。我已经使用 SQLOLEDB 连接到数据库,我在下面粘贴了它的代码。从查询中获得的数据存储在 DataTable 类型的变量中。现在我想以 JSON 输出的形式查看查询结果的内容,对此我有一个微弱的想法,即我必须创建一个新的控制器。但我无法超越这一点。

如果有人能在这方面帮助我,我将不胜感激

0 投票
1 回答
82 浏览

c# - 在 c# 或 wpf Devexpress 中使用 SQLOLEDB

刚刚遇到https://social.msdn.microsoft.com/Forums/sqlserver/en-US/0ff7f210-7697-431b-9e6b-0f2e10f4c031/sql-2016-slow-connection-using-server-name-fast-using -127001?forum=sqlsetupandupgrade

是否有可能在 ac# 程序中简单地绕过 .net 并简单地拥有这种性能?

这是为了使用这个提供者而改变连接,还是更复杂的东西?

成功:提供者=SQLOLEDB;数据源=::1;集成安全=SSPI 已用:00:00:00.0015378

下面是我们现在的做法: SqlCommand command = new SqlCommand(queryString, connection); 连接.打开();

这是连接字符串:Server=...;Database=...;Uid=...;Pwd=...;Encrypt=True;TrustServerCertificate = true;Asynchronous Processing=true;MultipleActiveResultSets=True