質問

かべるカラムの値は違反の制約は?例外のメッセージな朝食付きのプランを選択すべて:

失敗したよ。一や より多くの行を含む値に違反する nullでない場合は、独自の、または外国のキー 制約に

役に立ちましたか?

解決

性質があるというRowErrorできます。

http://dotnetdebug.net/2006/07/16/constraintexception-a-helpful-tip/

編集-この機能を追加リンクを示すの繰り返し行の見した。

http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework.adonet/topic58812.aspx

他のヒント

多くの人々と同様に、DataSetを返すメソッドを含む独自の標準データアクセスコンポーネントを持っています。もちろん、ConstraintExceptionがスローされた場合、DataSetは呼び出し側に返されないため、呼び出し側は行エラーをチェックできません。

このようなメソッドでConstraintExceptionをキャッチして再スローし、次の例のように行エラーの詳細をログに記録します(Log4Netをログに使用):

...
try
{
    adapter.Fill(dataTable); // or dataSet
}
catch (ConstraintException)
{
    LogErrors(dataTable);
    throw;
}
...

private static void LogErrors(DataSet dataSet)
{
    foreach (DataTable dataTable in dataSet.Tables)
    {
        LogErrors(dataTable);
    }
}

private static void LogErrors(DataTable dataTable)
{
    if (!dataTable.HasErrors) return;
    StringBuilder sb = new StringBuilder();
    sb.AppendFormat(
        CultureInfo.CurrentCulture,
        "ConstraintException while  filling {0}",
        dataTable.TableName);
    DataRow[] errorRows = dataTable.GetErrors();
    for (int i = 0; (i < MAX_ERRORS_TO_LOG) && (i < errorRows.Length); i++)
    {
        sb.AppendLine();
        sb.Append(errorRows[i].RowError);
    }
    _logger.Error(sb.ToString());
}

強力な型指定されたデータセットを使用し、ビジュアルデザイナー(xsd)を使用した場合: tbl.Rows [0] .RowError 情報にアクセスするには、 Fill メソッド。

DataTableは生成されたコード内でインスタンス化されるため、 Get メソッドは使用できません。

こちらでConstraintExceptionの発生をデバッグするのに役立つコードを追加しました

a>

これがお役に立てば幸いです。

スニペットでConstraintExceptionの詳細を取得したいGoogle社員の場合:

try
{
    ds.EnforceConstraints = true;
}
catch (ConstraintException ex)
{
    string details = string.Join("",
        ds.Tables.Cast<DataTable>()
            .Where(t => t.HasErrors)
            .SelectMany(t => t.GetErrors())
            .Take(50)
            .Select(r => "\n - " + r.Table.TableName + "[" + string.Join(", ", r.Table.PrimaryKey.Select(c => r[c])) + "]: " + r.RowError));
    throw new ConstraintException(ex.Message + details);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top