0

Visual Studio または \bin\release ディレクトリ内の実行可能ファイルで WinForms c# アプリを実行すると、データ テーブルに参照 (設定) しているフィールドが含まれていないという奇妙なエラー メッセージが表示されます。

フィールドが存在することはわかっていますが、データテーブル オブジェクトを複数回使用するプロセスを実行したときにのみエラー メッセージが表示されます。

(実行可能ファイルで) [続行] をクリックすると、アプリケーションは問題なく続行し、本来の処理を実行します。

コード スニペットを次に示します。

dtCreditCases.Rows.Clear();

    foreach (task_creditcases item in creditCases)
    {    

        DataRow drCases = dtCreditCases.NewRow();

        // Then add the new row to the collection.
        drCases["Case ID"] = item.c_Id;
        drCases["Case Number"] = item.c_Name; 
        drCases["Case Topic"] = "Credit Case";
        drCases["Case SubTopic"] = "Credit Case";
        drCases["Account Number"] = item.c_EquationCustomerNumber

{"列 'ケース ID' はテーブルに属していません。"}drCases["Case Number"] = item.c_Name;というメッセージが表示された行で、コードの実行が停止します。

内部例外は null です。

例外の詳細は次のとおりです。

System.ArgumentException はユーザー コードによって処理されませんでした Message=Column 'Case ID' は table に属していません。Source=System.Data
StackTrace: System.Data.DataRow.GetDataColumn(String columnName) at System.Data.DataRow.set_Item(String columnName, Object value) at SFDetachifier.SFDetachifier.bgProcessing_Production_ProgressChanged(Object sender, ProgressChangedEventArgs e) in C: \Dev\SFDetachifier_2013\SFDetachifier\SFDetachifier.cs: System.ComponentModel.BackgroundWorker.OnProgressChanged(ProgressChangedEventArgs e) の行 1304 System.ComponentModel.BackgroundWorker.ProgressReporter(Object arg)
InnerException:

データテーブルが問題ではないことはわかっています。他の場所で何かが起こっているに違いありません。データテーブルが再利用されているためかどうか疑問に思っています。

プロセスが完了したら、すべてのオブジェクトに対して明示的に dispose を呼び出す必要がありますか?

4

1 に答える 1

0

テーブルを 2 回目に使用する前に、dtCreditCases.Columns に変更を加えてしまったようです。プログラムが本来すべきことを行う理由は、コード セクションを「try/catch」に入れることができるからです (推測ですが)。

この問題のもう 1 つの理由は、データ テーブルがマルチスレッド プログラムの 2 つのスレッドで共有されていることです。

于 2013-11-12T11:54:04.493 に答える