【问题标题】:.NET error message when running a process more than once多次运行进程时出现 .NET 错误消息
【发布时间】:2013-11-12 11:02:32
【问题描述】:

在 Visual Studio 或 \bin\release 目录中的可执行文件中运行我的 WinForms c# 应用程序时,我收到一条奇怪的错误消息,指出数据表不包含我正在引用(设置)的字段。

我知道该字段在那里,并且我只在运行多次使用数据表对象的进程时收到错误消息。

当我单击“继续”(在可执行文件中)时,应用程序会继续正常运行并执行它应该执行的操作。

这是一个代码sn-p:

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

代码在drCases["Case Number"] = item.c_Name; 行停止执行,并显示消息{"Column 'Case ID' doesn't属于table ."}

内部异常为空。

这里是异常细节:

System.ArgumentException 未被用户代码 Message=Column 处理 “案例 ID”不属于表。源=System.Data
堆栈跟踪: 在 System.Data.DataRow.GetDataColumn(字符串列名) 在 System.Data.DataRow.set_Item(字符串列名,对象值) 在 SFDetachifier.SFDetachifier.bgProcessing_Production_ProgressChanged(对象 发件人,ProgressChangedEventArgs e) 在 C:\Dev\SFDetachifier_2013\SFDetachifier\SFDetachifier.cs:1304 行 在 System.ComponentModel.BackgroundWorker.OnProgressChanged(ProgressChangedEventArgs e) 在 System.ComponentModel.BackgroundWorker.ProgressReporter(Object arg)
内部异常:

我知道数据表不是问题,肯定是其他地方发生了一些事情,我想知道是不是因为数据表被重复使用了。

我是否应该在我的进程完成后显式调用所有对象的 dispose?

【问题讨论】:

  • 你可以在 using(...) 子句中使用它们...
  • 包括所有IDsiposable elemnets,使用它将负责处理。
  • 您可以在此处发布错误的原始文本。
  • 对不起,我不明白你所说的“在其中包含所有 iDisposable 元素”是什么意思 - 请给我一个例子吗?
  • @Vasili Ruzov:我会这样做

标签: c# .net winforms


【解决方案1】:

恐怕您在第二次使用该表之前对 dtCreditCases.Columns 进行了一些更改。程序做它应该做的事情的原因是你可以把代码部分放在一个'try/catch'中(只是猜测)。

这个问题的另一个原因是数据表被多线程程序中的2个线程共享。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多