2014-10-20 2 views
0

Я использую context.Database.ExecuteSql для обновления таблицы. Обновление с предложением where выполняется правильно, и запись обновляется. Однако метод возвращает 2 для rowcount, а не 1. Когда я выполняю инструкцию обновления в SSMS, возвращаемый результат rowcount равен 1. Может ли кто-нибудь дать представление об этом?Database.ExecuteSqlCommand возвращает неверную строку строк

  string query = 
      string.Format("update {0} set Description = '{1}', Code = '{2}', LastUpdatedBy = '{3}', LastUpdatedDate = '{4}' where ID = {5};", 
       tableName, 
       description, 
       code, 
       lastUpdatedBy, 
       lastUpdatedDate, 
       ID); 

     int rowCount = 0; 
     string message = string.Empty; 

     using (DBContext context = new DBContext()) 
     { 
      rowCount = context.Database.ExecuteSqlCommand(TransactionalBehavior.EnsureTransaction, query); 
     } 

     return rowCount == 0 ? //this return 2 instead of 1. 
      new SaveResult(SaveResult.MessageType.Error, string.Format("There was an error updating a record in the {0} table.", tableName), "Index") : 
      new SaveResult(SaveResult.MessageType.Success, string.Format("The update of {0} was successful.", tableName), "Index"); 

Это возвращает ROWCOUNT = 1 в SSMS:

update zAddressTypes 
set Description = 'Current', Code = '101122', LastUpdatedBy = 'user', LastUpdatedDate = '10/20/2014 12:17:26 PM' 
where ID = 1; 

DECLARE @RowCount INTEGER = @@ROWCOUNT; 
select @RowCount; 

ответ

1

Количество строк возвращается отдельно. То, что вы видите здесь, - это статус выхода запроса.

ExecuteSqlCommand возвращаемое значение для статуса запроса не для подсчета строк. Возможно, вам захочется взглянуть на использование datareader или что-то подобное, чтобы вернуть строку.

+0

Спасибо, что объясняет это. –

Смежные вопросы