能否使用Dapper截断一个或多个表?

3

我想知道是否可以使用Dapper运行像Truncate Table x这样的TSQL查询?

我尝试过的:

using (var con = DB.Connection)
{
    con.Open();
    var ret = con.Execute("Truncate Table [Y].[X]");
}

PS. I do not want to create a SP for it.


2
你尝试过这个吗?出了什么问题吗?如果失败了,是怎么失败的? - Mureinik
@Mureinik 当我执行它时,它会变成-1。 - Masoud Andalibi
我不知道什么是“Dapper”,但是截断表可以通过一个简单的查询完成,任何外部应用程序都可以执行。SSMS和您开发的任何应用程序之间没有区别。只要您有权限,就可以使用“SQL Server操作工作室”或任何应用程序来执行与使用SSMS相同的操作。 - Ronen Ariely
1个回答

6
你似乎认为返回-1表示问题。但根据Truncate的文档Truncate

从表中移除所有行或指定分区的行,而不记录单个行删除。

Dapper的Execute方法返回受影响的行数

所以对我来说,-1似乎是合理的。

编辑添加

在进一步调查GitHub中的源代码后,Dapper的Execute扩展在底层调用SqlMapper的ExecuteImpl方法,它(由于调用方式的原因只能有两种方式; 但基本上两种方式都适用)最终返回IDbCommand的ExecuteNonQuery的结果。因此,有了这个谜题的一部分,Martin Smith从 MSDN's ExecuteNonQuery获得的信息适用:

对于UPDATE、INSERT和DELETE语句,返回值是命令所影响的行数。对于所有其他类型的语句,返回值为-1


对于 UPDATE、INSERT 和 DELETE 语句,返回值是命令所影响的行数。对于所有其他类型的语句,返回值为 -1。 - Martin Smith

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