2016-06-29 5 views
4

Я хочу, чтобы обновить строку в таблице:Есть ли способ отображения сообщения об ошибке, если таблица не обновлена?

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?

+0

да, проверьте содержимое исключения – BugFinder

+0

Проверьте исключение, то не игнорировать исключение. –

+0

@BugFinder, если идентификатор 'ID' не найден, исключений нет. – user3185569

ответ

5

Фактически ExecuteNonQuery возвращает количество затронутых строк. Вы можете использовать что:

int affectedRows = command.ExecuteNonQuery(); 

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

Прежде всего, если вы подключаетесь к (Microsoft) SQL Server, вам нужно использовать SqlConnection и SqlCommand - не MySqlConnection и MySqlCommand.

Во-вторых - вызов ExecuteNonQuery() возвращает int, который определяет количество затронутых строк - прочитайте это, а если оно равно 0, то обновление не было произведено.

int rowsAffected = command.ExecuteNonQuery(); 

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

Когда SET NOCOUNT является ON, счетчик не возвращается. Когда SET NOCOUNT - OFF, счетчик возвращается.

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

Если количество строк больше чем 2 миллиарда, использовать ROWCOUNT_BIG https://msdn.microsoft.com/en-ca/library/ms181406.aspx

!!!! Функция @@ ROWCOUNT обновляется, даже если SET NOCOUNT включен. 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 включен.

Я думаю, -1 или 0