2010-08-27 41 views
4

我使用C#程序和我的数据库是SQL Server 2008中显示有多少行被删除

当用户删除了数据库中的某些行,我想告诉他/她在windows应用程序有多少行删除。

我想知道如何发送SQL消息到C#并显示给用户。 例如,当我从表中删除4行时,SQL show消息就像(4行受影响)。现在我想发送4号到我的C#程序。我该怎么做?谢谢。

回答

4

如果您使用.NET应用程序中的SqlCommand执行删除/更新,则ExecuteNonQuery()的结果返回受该命令的最后一条语句影响的行数。

参见http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

+0

请注意,如果SQL Server的NOCOUNT选项处于打开状态,则它会干扰ExecuteNonQuery的返回值。 (http://petesbloggerama.blogspot.com/2006/10/note-to-self-set-nocount-on-not.html),(http://aspsoft.blogs.com/jonas/2006/10/executenonquery .html) – 2010-08-27 21:00:46

+0

这是否意味着executeNoneQuery()函数返回int值,我可以把它放在int参数中?例如: : int count = executeNoneQuery(); – mahnaz 2010-08-27 21:19:14

+0

非常感谢你。我使用这个命令,它工作。 // ----------------------- SqlDataAdapter >>>>>>>>>>>> sda ........ .. int count = sda.DeleteCommand.ExecuteNonQuery(); – mahnaz 2010-08-27 21:50:13

0

我想你会想要在删除语句上选择“计数”,然后再发出删除,然后捕获该数字并根据需要对其进行处理。

+0

这是个好主意。请注意,它需要良好的事务管理才能可靠。 – kbrimington 2010-08-27 20:46:08

+1

有许多方法可以嵌入到SQL中,以避免必须执行2个查询 – DaveShaw 2010-08-27 20:46:10

+0

+1,因为这通常是我通常使用Linq-to-Sql处理它的方式。 – kbrimington 2010-08-27 21:55:27

0

使用SQL环境变量@@RowCount。 如果您正在使用它们,您可以将它从存储过程中返回。

0

如果您使用System.Data.SqlClient.SqlCommand.ExecuteNonQuery方法或System.Data.Common.DbCommand.ExecuteNonQuery方法,则返回值应该是您的语句(您的命令中的最后一条语句,我认为)所影响的行数。

有一个告诫,如果你执行一个批处理或存储过程没有SET NOCOUNT ON,那么每个语句影响的行数不会被报告,ExecuteNonQuery将返回-1。

在T-SQL中,有一个@@rowcount变量,您可以访问该变量以获取受最后一条语句影响的行数。很明显,您需要在DELETE语句后立即获取它,但如果您使用的是SET NOCOUNT ON,我相信您可以在T-SQL中执行return @@rowcount

替代方法是将该值作为OUTPUT参数返回,特别是如果您有一批多个语句,并且想知道每个行受到多少行的影响。有些人喜欢使用T-SQL RETURN语句来报告成功/失败,所以为了一致性,您可能希望避免返回“受影响的行数”。