4

データベースからレコードを削除するときに、参照制約の例外が発生することがあります。

例外の詳細は次のとおりです。例外が外部キー制約エラーに特に関連している場合、ユーザーにメッセージを表示することは可能ですか?

例外エラー文字列を調べて単語の存在をテストすることはできますが、特定のSQLエラーをチェックするためのより良い方法があるかどうかはわかりませんでした。

ありがとうケビン

Message: The DELETE statement conflicted with the REFERENCE constraint "FK_Customers_PaymentTerms". The conflict occurred in database "kd", table "dbo.Customers", column 'CstPtmID'.
The statement has been terminated.
Source: .Net SqlClient Data Provider
TargetSite: Void OnError(System.Data.SqlClient.SqlException, Boolean)
StackTrace:    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
   at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
4

3 に答える 3

14

例外が特に外部キー制約エラーに関連している場合、ユーザーにメッセージを表示することは可能ですか?

はい、NumberSqlException を確認できます。

try
{
    // do your database query
}
catch (SqlException ex)
{
    if (ex.Number == .....)
    {
        // Can't remember from the top of my head the exact error code 
        // that is triggered in this situation. Just check it.
    }
}

コメント セクションで説明したようErrorsに、1 つの SQL クエリに関連する複数のエラーが発生する可能性があるため、配列を確認することをお勧めします。

于 2012-06-25T14:23:04.087 に答える
1

SqlExceptionの下を見てください

catch(SqlException se)
{
    if(se.Number == x)
    {
        //Show message
    }
}
于 2012-06-25T14:25:16.697 に答える