7

System.Data.Common.DbCommand を使用して、データベースに新しい行を挿入します。ポイントは、この行がすでに存在することです。

try
{
    [...]
    DbCommand insertCommand = [...]
    insertCommand.ExecuteScalar();
    [...]
}
catch (System.Exception exception)
{
   [...]
   throw;
}

System.Data.SqlClient.SqlException を明示的にキャッチすると、次のように ErrorNumber を評価できます。

try
{
  //insertion code
}
catch(SqlException ex)
{
  if(ex.Number == 2627)
  {
     //Violation of primary key. Handle Exception
  }
}

SqlException のコンテキストでの ErrorNumber 2627 は、一意のキーの違反を意味します。https://msdn.microsoft.com/en-us/library/ms151757%28v=sql.110%29.aspxを参照してください。

ここまでは順調ですね。私は DbCommand を使用しているため、さまざまな種類のリレーショナル データベース管理システムを使用しているため、このような一意キー制約の違反を検出するためのより一般的な方法を探しています。

手伝ってくれてありがとう。

4

2 に答える 2

0

データベースがキーを割り当てることを許可するか、GUID をキーとして使用する必要があります。データベースは複数ユーザーの同時アクセスを中心に設計されているため、次のキーが何であるかをコードで知る方法がないため、DB を許可する必要があります。独自のキーを管理するか、一意性が保証されたキーを使用します。

ただし、すべてのデータベース実装は独自のエラーコードセットを使用するため、使用しているプロバイダーを知らずにエラーコードに意味を与える方法はありません。エラーコードの国際標準を作成するようISOに請願する以外にはありません。動作します

于 2015-03-10T10:46:07.240 に答える