Любая вероятность сбоя одного запроса при использовании двух запросов в ExecuteScalar - PullRequest
1 голос
/ 31 мая 2011

Я написал запрос, который представляет собой составной запрос, например, один запрос на обновление и один запрос на вставку.Я использую ExecuteScalar.Есть ли вероятность того, что один запрос не удастся, а другой будет выполнен успешно.Это будет полный или частичный сбой, если один из запросов будет неправильным.

Может кто-нибудь, пожалуйста, помогите :)

Ответы [ 2 ]

3 голосов
/ 31 мая 2011

Неважно как вы вызываете его;для составной операции вполне возможно, что первая операция будет успешной, а вторая - неудачной (например, нарушение уникального ключа или нарушение внешнего ключа).Если вам нужно убедиться, что все или ничего, то окружите вызов Execute* транзакцией и выполняйте коммит только тогда, когда вы знаете, что все работает.

Вы также можете создавать транзакции на уровне SQL, ноинструменты в вашем распоряжении легче ошибиться, если вы сделаете это в TSQL.Это делает, чтобы отдать должное, избегать нескольких поездок в оба конца - но обычно не настолько, чтобы стоило бороться с языком, чтобы сделать это.В конечном счете, SQL предназначен для хороших операций DML на основе множеств - он не так хорош в более процедурном коде, таком как управление потоком выполнения.

0 голосов
/ 31 мая 2011

Да, есть вероятность, что ваш один запрос завершится неудачно, а другой выполнится. и почему бы не использовать ExecuteNonQuery вместо ExecuteScalar. Лучше использовать «транзакции» для таких сценариев

...