Dapper:从“SELECT COUNT(*) FROM TableName”获取的结果

32

我有以下代码:

string sql = "SELECT COUNT(*) FROM " + tableName;
var rtn = DapperConnection.Query<int>(sql);

这个操作有效,并通过rtn变量返回1条记录。当我检查变量时,它似乎有2个成员,一个是“[0]”,另一个是“Raw View”。

[0]成员是int类型,并具有预期值,但我似乎无法在我的代码中获取该值。这似乎是一个愚蠢的问题,因为我应该能够得到它,但却不能。最新的尝试如下:

int rtnCount = (int)rtn[0];

然而,这给了我一个编译器错误。在我的代码中,如何获得这个值?


3
rtn.First() 可能是指返回结果的第一个元素? - MiMo
是的,那就是诀窍。非常感谢你。你让我的一天!!! - user2975847
2个回答

68

请不要这样做!它很脆弱,并引入了一个严重的SQL注入漏洞。如果您可以使用一行非常表达式化的代码且没有漏洞来返回给定表格的计数,为什么要将其制作成方法?

改为这样做:

DapperConnection.ExecuteScalar<int>("SELECT COUNT(*) FROM customers");

// You will be happier and live longer if you avoid dynamically constructing 
// sql with string concat.

3
我理解“请不要这样做!”并不是指你自己的回答,而是原始问题中的例子(?)。 - Phil
2
哈!没想到那个 :-) 下次我会更清楚些。 - bbsimonbb
1
只要您完全控制表名变量,这样做就没问题。但是不要使用用户输入来执行此操作。 - eltiare
1
意见不一。就我个人而言,我无法相信我们曾经使用字符串方法攻击SQL。这只是异常的,但它是整个行业的异常 - 你不需要把这个当作个人攻击。在我看来,这个 是我们应该与数据库交流的方式 :-) - bbsimonbb

6

使用 rtn.First() 方法获取枚举类型的第一个(在这种情况下也是唯一的)元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接