「ベター」はここではちょっと主観的なもので、どのような「より良い」ものが好きですか。おそらく、あなたはパフォーマンスの観点から意味ならば、私はオプション1が(でも2回)SQL Serverの既存の値のインデックスをチェックする処理するので、実際にはよりパフォーマンスで賭けることをいとわないだろう
に何が起こっているか非常にはっきりしているので、ビューのメンテナンスポイントは、その後、オプション2は、私の意見でははるかに望ましいです
//assuming you have a connection open, a command prepared, etc.
try
{
var result=command.ExecuteNonQuery();
}
catch(SqlException ex)
{
if(ex.Number==2627)
{
//Unique Key constraint violation.
//Error 2627 is documented and well known to be a Unique Key Constraint Violation
//so it's immediately obvious what's going on here
}
}
var result=command.ExecuteNonQuery();
if (result==-1)
{
//this means a unique key violation
//what if that comment got removed? I'd have no clue what
//-1 meant...
}
一見したところでは、2番目のものは短くてサクシンントです。
注:MetroSmurfが指摘しているように、例外をここにキャッチすることは理想的ではなく、呼び出し側が処理する必要があります。これは説明のためです。
これは、ここの-1がストアドプロシージャの部分ではかなり恣意的であるためです。あなたがそれを文書化できることを保証できない限り、この文書は古くなってしまうことはありません。そうすれば、次の開発者がストアドプロシージャを参照しなければならないという負担をかけ、 1は、この意味での意味です。
プラスそれはあなたのC#に触れずにSPを変更するために誰かのために可能なので、何をSPが突然ユニークキー違反のために「42」を返す開始した場合にどうするつもりですか?もちろん、あなたはSPを完全にコントロールすることができますが、それはいつもそうでしょうか?
例外処理コードをC#コードに適用してください。これは良い方法です – iOS