【发布时间】:2016-11-10 02:21:48
【问题描述】:
与Column Number rather than Column Name 类似,但我相信它是不同的,因为那是针对未命名的列,而我的列是命名的,我只是不知道提前的名称。
首先,一些背景。我正在创建一个将查询及其参数作为参数的方法,然后运行查询(使用 Dapper)并检查第一行、第一列的值是 1 还是 0。它旨在用作通用验证器数据库。
例如,用户可以输入一个查询,如果某个表中存在某个值,则该查询在唯一行的唯一列中返回 1,否则返回 0。此方法的使用范围非常广泛,并且大部分精力都放在编写查询的用户身上(我还应该澄清一下,在这种情况下,“用户”始终是另一个开发人员,并且使用是在调用此方法的代码中完成的,不是在表单输入上)。
我想查询我的数据库并在不知道列名的情况下提前获取第一行、第一列的值。理想情况下(虽然我不确定这是否可能在 Dapper 调用中),我还希望 要求 结果中只有一行和一列。当我四处寻找时,我的初始解决方案基于this 帖子的第一个答案,但发现要使其工作,我需要知道列的名称:
var dict = connection.Query(query, parameters).ToDictionary(row => (string)row.VALUE);
if(dict.ElementAt(0).Value != 1){
//do stuff
}
我想只添加一个要求,即用户添加一个别名,该别名将第一列命名为某个常量值(在本例中为 VALUE),但我宁愿不把负担放在我的用户身上可能。
最终我的核心问题是:如何在不知道列名的情况下使用 Dapper 获取数据库中命名列的值? 有人有什么想法吗?
【问题讨论】:
-
如何定义结果集中的“第一”行?您的所有查询都保证有一个确定性的 ORDER BY 子句吗?
-
@mathguy 最终我希望查询只返回一行;这种方法故意非常广泛。正如我所说,此方法旨在成为数据库数据的通用验证器;因此,当正确使用时,查询将只有一个结果行。如果有不止一行,则查询无效,我可以检查此问题范围之外的内容。这种方法的工作负担在于用户编写查询,这是有意的。如果可能的话,我只是不想要求他们为他们的专栏命名。