【问题标题】:Is there a way to display an error message if the table is not updated?如果表格没有更新,有没有办法显示错误消息?
【发布时间】:2016-06-29 11:25:02
【问题描述】:

我想更新表格中的一行:

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?

【问题讨论】:

  • 是的,检查异常的内容
  • 检查你的异常,不要忽略异常。
  • @BugFinder 如果没有找到ID,也不例外。
  • 可以得到ExecuteNonQuery()方法返回影响的行数。

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


【解决方案1】:

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

int affectedRows = command.ExecuteNonQuery();

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

【讨论】:

    【解决方案2】:

    首先,如果你连接到(微软)SQL Server,你需要使用SqlConnectionSqlCommand——不是MySqlConnectionMySqlCommand

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

    int rowsAffected = command.ExecuteNonQuery();
    
    if (rowsAffected == 0)
    {
        // show message - no rows updated
    }
    

    【讨论】:

      【解决方案3】:

      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

      【讨论】:

        猜你喜欢
        • 2020-03-31
        • 2014-08-14
        • 1970-01-01
        • 1970-01-01
        • 2020-11-12
        • 1970-01-01
        • 2012-10-18
        • 1970-01-01
        • 2021-03-08
        相关资源
        最近更新 更多