如果表没有更新,有没有办法显示错误消息?

时间:2016-06-29 11:25:02

标签: c# sql sql-server sql-server-2014

我想更新表格中的一行:

try
{
    string sql ="UPDATE TableNAme SET FirstName ='John' WHERE ID = 123";

    MySqlCommand command = new MySqlCommand(sql, connection);
    connection.Open();

    command.ExecuteNonQuery();
}
catch (Exception)
{
}
finally
{
    connection.Close();
}

根据ID(密钥),如果ID在表中,它可以很好地工作,但如果表中没有ID,则表示没有错误消息。

有没有办法可以知道是否找不到ID?

3 个答案:

答案 0 :(得分:5)

实际上ExecuteNonQuery会返回受影响的行数。你可以利用它:

int affectedRows = command.ExecuteNonQuery();

if (affectedRows == 0)
{
    // show error;
}
else
{
    // success;
}

答案 1 :(得分:4)

首先,如果您连接到(Microsoft) SQL Server ,则需要使用 SqlConnection SqlCommand < / strong> - 不是MySqlConnectionMySqlCommand

其次 - ExecuteNonQuery()调用返回一个int,它定义了受影响的行数 - 读出它,如果它是0,则不进行更新。

int rowsAffected = command.ExecuteNonQuery();

if (rowsAffected == 0)
{
    // show message - no rows updated
}

答案 2 :(得分:1)

SET NOCOUNTON时,不会返回计数。当SET NOCOUNTOFF时,会返回计数。

https://msdn.microsoft.com/en-us/library/ms189837.aspx

其他方法是使用纯SQL或检查服务器默认设置SET NOCOUNT { ON | OFF }

// Will return always 0  if SET NOCOUNT is ON.!!!
int affectedRows = command.ExecuteNonQuery();  

@@ROWCOUNT(Transact-SQL) https://msdn.microsoft.com/en-CA/library/ms187316.aspx

如果行数超过20亿,请使用ROWCOUNT_BIG https://msdn.microsoft.com/en-ca/library/ms181406.aspx

!!!!即使SET NOCOUNT为ON,@@ ROWCOUNT函数也会更新。 https://msdn.microsoft.com/en-us/library/ms189837.aspx

我个人会做SQL

      USE AdventureWorks2012;  
      GO  

      UPDATE HumanResources.Employee   
      SET JobTitle = N'Executive'  
      WHERE NationalIDNumber = 123456789  

      IF @@ROWCOUNT = 0  
      PRINT 'Warning: No rows were updated';  
      GO  

使用SQL的其他参数是将此代码移动到存储过程。

如果SET NOCOUNT为ON,则返回值将错误。

我认为-1或0