在winform exe中,在combobox选择中抛出异常,在调试模式下工作正常

时间:2013-05-30 06:39:30

标签: c# winforms visual-studio-2010

我有一个用c#编写的winform应用程序。在其中一个表格中,有一个名为' Researcher Name'的组合框。它是使用名为' Researcher Info'的MS Access表中的tableadapters进行数据绑定的。它有两列'研究员名称'和'研究员时代'研究员名称是主键。

当运行创建的exe文件时,在选择此组合框中的任何值时(仅选择,此处没有发生数据库读/写,除了使选项更改事件上运行的按钮可见之外,我没有代码),它抛出下面的例外,说明所选的组合框项目已经存在。有趣的是,我只选择一个值,而不是在db中输入值。

enter image description here

但它在Visual Studio调试模式下工作正常。即:做同样的事情没有例外......

没有太多代码可以显示这个特定的活动,但是这里有:

  

//在页面加载时,表适配器填充组合框

private void editstaffdetails_Load(object sender, EventArgs e)
{     this.researcher_InfoTableAdapter.Fill(this.research_Log_DatabaseDataSet1.Researcher_Info);

  researcher_NameComboBox.SelectedIndex = -1;

  Delete_btn.Visible = false;
  Update_btn.Visible = false;
}

 private void researcher_NameComboBox_SelectedIndexChanged(object sender, EventArgs e)
 {
   try
   { 
     Update_btn.Visible = true;
     Delete_btn.Visible = true;
   }
   catch (Exception ex)
   {
     MessageBox.Show(ex.ToString());
   }
 }

这是表适配器的Fill方法的代码,它是默认生成的代码。

this.researcher_InfoTableAdapter.Fill(this.research_Log_DatabaseDataSet1.Researcher_Info);

  

public virtual int   填充(Research_Log_DatabaseDataSet1.Researcher_InfoDataTable dataTable)

     

{

     

this.Adapter.SelectCommand = this.CommandCollection [0];

        if ((this.ClearBeforeFill == true)) 

        {  dataTable.Clear();  }

        int returnValue = this.Adapter.Fill(dataTable);
        return returnValue; }

以下是异常堆栈跟踪:

  

**************例外文字**************

     

System.Data.ConstraintException:Column' Researcher Name'是   被限制为独特的。价值' Kwek Gwen'已存在。
  在System.Data.UniqueConstraint.CheckConstraint(DataRow行,   DataRowAction动作)
  在System.Data.DataTable.RaiseRowChanging(DataRowChangeEventArgs args,   DataRow eRow,DataRowAction eAction,Boolean fireEvent)
  在System.Data.DataTable.SetNewRecordWorker(DataRow行,Int32   proposedRecord,DataRowAction动作,Boolean isInMerge,Int32   position,Boolean fireEvent,Exception& deferredException)
  在System.Data.DataTable.SetNewRecord(DataRow行,Int32 proposedRecord,   DataRowAction动作,Boolean isInMerge,Boolean fireEvent)
  在System.Data.DataRow.SetNewRecord(Int32记录)
  在System.Data.DataRow.EndEdit()
  在System.Data.DataRowView.EndEdit()   在System.Windows.Forms.CurrencyManager.EndCurrentEdit()
  在System.Windows.Forms.CurrencyManager.ChangeRecordState(Int32   newPosition,Boolean validating,Boolean endCurrentEdit,Boolean   firePositionChange,Boolean pullData)
  在System.Windows.Forms.CurrencyManager.set_Position(Int32 value)
  在System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
  在System.Windows.Forms.ComboBox.WmReflectCommand(Message& m)
  在System.Windows.Forms.ComboBox.WndProc(Message& m)
  在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)   在System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息& m)
  在System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32   msg,IntPtr wparam,IntPtr lparam)

以下是调试输出窗口显示的内容,在组合框单击事件期间启用了所有例外

  

主题' vshost.LoadReference' (0x15f0)已退出代码0(0x0)。   ' WindowsFormsApplication1.vshost.exe' (管理(v2.0.50727)):已加载' C:\ Users \ jollyk \ documents \ visual studio   2010 \项目\ WindowsFormsApplication1 \ WindowsFormsApplication1 \ BIN \发布\ WindowsFormsApplication1.exe&#39 ;,   符号已加载。   ' WindowsFormsApplication1.vshost.exe' (管理   (v2.0.50727)):已加载   ' C:\ Windows \组件\ GAC_MSIL \辅助\ 2.0.0.0__b03f5f7f11d50a3a \ Accessibility.dll&#39 ;,   跳过加载符号。模块已优化并具有调试器选项   ' Just My Code'已启用。   ' WindowsFormsApplication1.vshost.exe'   (管理(v2.0.50727)):已加载   ' C:\ Windows \组件\ GAC_MSIL \ System.Configuration \ 2.0.0.0__b03f5f7f11d50a3a \ System.Configuration.dll&#39 ;,   跳过加载符号。模块已优化并具有调试器选项   ' Just My Code'已启用。   ' WindowsFormsApplication1.vshost.exe'   (管理(v2.0.50727)):已加载   ' C:\ Windows \组件\ GAC_32 \ System.Transactions的\ 2.0.0.0__b77a5c561934e089 \ System.Transactions.dll&#39 ;,   跳过加载符号。模块已优化并具有调试器选项   ' Just My Code'已启用。   ' WindowsFormsApplication1.vshost.exe'   (管理(v2.0.50727)):已加载   ' C:\ Windows \组件\ GAC_32 \的System.EnterpriseServices \ 2.0.0.0__b03f5f7f11d50a3a \ System.EnterpriseServices.dll&#39 ;,   跳过加载符号。模块已优化并具有调试器选项   ' Just My Code'已启用。   ' WindowsFormsApplication1.vshost.exe'   (管理(v2.0.50727)):已加载   ' C:\ Windows \组件\ GAC_32 \的System.EnterpriseServices \ 2.0.0.0__b03f5f7f11d50a3a \ System.EnterpriseServices.Wrapper.dll&#39 ;,   跳过加载符号。模块已优化并具有调试器选项   ' Just My Code'已启用。线程'' (0x1248)退出了   代码为0(0x0)。线程'' (0xd84)已退出代码   0(0x0)。步入:踩过非用户代码   ' System.Windows.Forms.ComboBox.OnSelectedIndexChanged'踏入:   单步执行非用户代码   ' System.Windows.Forms.NativeWindow.DebuggableCallback'踏入:   单步执行非用户代码   ' System.Windows.Forms.Control.ReflectMessageInternal'踏入:   单步执行非用户代码&Systems.Windows.Forms.Control.WmCommand'   步入:踩过非用户代码   ' System.Windows.Forms.Control.WndProc'步入:踩到   非用户代码' System.Windows.Forms.Form.WndProc'步入:踏步   超过非用户代码   ' System.Windows.Forms.NativeWindow.DebuggableCallback'踏入:   单步执行非用户代码   ' System.Windows.Forms.NativeWindow.DefWndProc'步入:踏步   超过非用户代码的System.Windows.Forms.Control.WmCommand'踏入:   单步执行非用户代码&Systems.Windows.Forms.Control.WndProc'   步入:踩过非用户代码   ' System.Windows.Forms.ComboBox.WndProc'步入:踩到   非用户代码' System.Windows.Forms.NativeWindow.DebuggableCallback'   步入:踩过非用户代码   ' System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop'

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:1)

我删除了表适配器并创建了一个新适配器,现在它可以工作了。然而,没有设法弄清楚第一个出了什么问题。我完成了表适配器,下次我编写代码。

答案 1 :(得分:0)

查看堆栈跟踪,当您更改Combobox选项时(显然)会导致更改数据集中的行,并且数据绑定正在尝试相应地重新填充Combobox行。那么也许你有一个Combobox的属性设置来重新验证选择的数据,或者数据绑定对象可能在选择改变时重新验证?