在 QueryBuilder 中使用动态输入时出现意外结果

Posted

技术标签:

【中文标题】在 QueryBuilder 中使用动态输入时出现意外结果【英文标题】:Unexpected results when using dynamic input in QueryBuilder 【发布时间】:2014-05-28 07:53:37 【问题描述】:

我编写了一个 SQL 查询来与 MS Access 数据库进行交互。这是查询:

SELECT COUNT(*) AS Expr1 
FROM employee 
WHERE ([M-ID] = ?) AND (pnumber NOT IN (
    SELECT pnumber 
    FROM evaluation 
    WHERE ([year] = ?) AND ([month] = ?)
))

该查询旨在计算employee 表中存在的数量记录在给定条件下evaluation 中不存在的记录数。

问题是当我用实际输入替换占位符时,它可以正常工作。但是,当查询中存在占位符 (?) 并且 VisualStudio 提示输入时,它会返回不同的结果。我在提示对话框中输入了与之前在查询中所做的相同的输入,但结果不同。当在查询中静态提供参数时,COUNT 的结果是正确的,但在通过 ? 占位符动态提供时则不正确。

以下是一些用于说明问题的屏幕截图。

动态输入:

动态输入结果:

静态输入结果:

有什么想法吗?

【问题讨论】:

我对 Visual Studio 查询生成器不是很熟悉,但是否可以用问号一一替换这 3 个静态值,以查看问题是否是由于一个特定的占位符引起的? 我做到了。据我所知,问题在于所有三个占位符的组合。如果我删除其中一个,则无论哪个查询都会正确导致 3。谢谢您的评论。 您是否也尝试过 2 个占位符和 1 个静态值的组合?抱歉,我所能做的就是思考,此时我猜查询生成器不会将弹出窗口的字段映射到正确的占位符(因为它们都被调用了?你无法知道哪个是查询中的第一/第二/第三。) 我刚刚重读了您的上一条评论,发现您实际上已经回答了我之前的问题,很抱歉错过了。 【参考方案1】:

猜测,但基于 Access 2.0 的经验:将连字符从字段名称中取出。

【讨论】:

非常感谢 Delmer,您为我节省了大量时间!

以上是关于在 QueryBuilder 中使用动态输入时出现意外结果的主要内容,如果未能解决你的问题,请参考以下文章

输入命令时出现 sql 错误

打开软件时出现无法定位程序输入点 GetTickCount64 于动态链接库 KERNEL32.dll 上。

安装Qt creator时出现 无法定位程序输入点_except1 于动态链接库MSVCR120.dll上

在 CUDA 的 __device__ 函数中使用动态分配时出现“未知错误”

使用 Javascript 在 Laravel 刀片视图中显示数组中的动态数据时出现问题

在 Next.js 中动态导入模块时出现“forwardRef”错误