我有一个用 c# 编写的 winform 应用程序。在其中一个表格上,有一个名为“研究人员姓名”的组合框。它是使用来自名为“Researcher Info”的 MS Access 表中的 tableadapter 进行数据绑定的,该表具有“Researcher Name”和“Researcher Age”两列。研究人员姓名是主键。
运行创建的 exe 文件时,在此组合框中选择任何值(仅选择,此处没有发生 db 读/写,除了使在选择更改事件上运行的按钮可见之外,我没有代码),它抛出下面的异常,说选定的组合框项目已经存在。有趣的是,我只选择一个值,而不是在数据库中输入值。
但它在 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 Fill(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:列“研究人员姓名”被限制为唯一。价值“Kwek Gwen”已经存在。
在 System.Data.UniqueConstraint.CheckConstraint(DataRow 行,DataRowAction 操作)
在 System.Data.DataTable.RaiseRowChanging(DataRowChangeEventArgs 参数,DataRow eRow,DataRowAction eAction,布尔 fireEvent)
在 System.Data.DataTable.SetNewRecordWorker(DataRow 行,Int32 建议记录, DataRowAction 操作, Boolean isInMerge, Int32 位置, Boolean fireEvent, Exception& deferredException)
at System.Data.DataTable.SetNewRecord(DataRow row, Int32提出记录, DataRowAction action, Boolean isInMerge, Boolean fireEvent)
at 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,布尔验证,布尔 endCurrentEdit,布尔 firePositionChange,布尔 pullData)
在系统.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(Message& 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\Projects\WindowsFormsApplication1\WindowsFormsApplication1\bin\Release\WindowsFormsApplication1.exe”,已加载符号。'WindowsFormsApplication1.vshost.exe'(托管 (v2.0.50727)):已加载 'C:\windows\assembly\GAC_MSIL\Accessibility\2.0.0.0__b03f5f7f11d50a3a\Accessibility.dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。'WindowsFormsApplication1.vshost.exe'(托管 (v2.0.50727)):已加载 'C:\windows\assembly\GAC_MSIL\System.Configuration\2.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。'WindowsFormsApplication1.vshost.exe'(托管 (v2.0.50727)):已加载 'C:\windows\assembly\GAC_32\System.Transactions\2.0.0.0__b77a5c561934e089\System.Transactions.dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。“WindowsFormsApplication1.vshost.exe”(托管 (v2.0.50727)):已加载“C:\windows\assembly\GAC_32\System.EnterpriseServices\2.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll”,跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。'WindowsFormsApplication1.vshost.exe'(托管 (v2.0.50727)):已加载 'C:\windows\assembly\GAC_32\System.EnterpriseServices\2.0.0。0__b03f5f7f11d50a3a\System.EnterpriseServices.Wrapper.dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。线程 '' (0x1248) 以代码 0 (0x0) 退出。线程 '' (0xd84) 以代码 0 (0x0) 退出。步入:步入非用户代码“System.Windows.Forms.ComboBox.OnSelectedIndexChanged”步入:步入非用户代码“System.Windows.Forms.NativeWindow.DebuggableCallback”步入:步入非用户代码“ System.Windows.Forms.Control.ReflectMessageInternal 步入:跨过非用户代码“System.Windows.Forms.Control.WmCommand” 步入:跨过非用户代码“System.Windows.Forms.Control.WndProc”步入:跨过非用户代码“System.Windows.Forms.
任何帮助表示赞赏。