1 つの更新クエリと 1 つの挿入クエリのような複合クエリであるクエリを作成しました。私はExecuteScalarを使用しています。1 つのクエリが失敗し、他のクエリが成功する可能性はありますか。クエリの 1 つが間違っていると、全体的な失敗または部分的な失敗になります。
誰か助けてください:)
1 つの更新クエリと 1 つの挿入クエリのような複合クエリであるクエリを作成しました。私はExecuteScalarを使用しています。1 つのクエリが失敗し、他のクエリが成功する可能性はありますか。クエリの 1 つが間違っていると、全体的な失敗または部分的な失敗になります。
誰か助けてください:)
どのように呼び出しても。複合操作の場合、最初の操作が成功し、2番目の操作が失敗する可能性があります(たとえば、一意キー違反または外部キー違反)。オールオアナッシングを保証する必要がある場合は、呼び出しをExecute*
トランザクションで囲み、すべてが機能したことがわかっている場合にのみコミットします。
SQLレベルでトランザクションを作成することもできますが、TSQLで作成すると、自由に使用できるツールを間違えやすくなります。それは、正当な信用を与えるために、いくつかの往復を避けます-しかし、通常、それをするために言語と戦う価値があるほど多くはありません。最終的に、SQLは優れたセットベースのDML操作用に設計されています。実行フロー管理などのより手続き型のコードはそれほど優れていません。
はい、1つのクエリが失敗し、他のクエリが実行される可能性があります。そして、ExecuteScalarの代わりにExecuteNonQueryを使用しないのはなぜですか。これらのタイプのシナリオには「トランザクション」を使用する方がよいでしょう