我在使用 DataReader 从数据库中保存一些数据时遇到了一些问题。或者至少我认为它是这样工作的。
我有一个 ComboBox,在程序开始时,我使用以下数据填充其项目:
Connect.Open();
Command.Connection = Connect;
Command.CommandText = "Select * from Department";
OleDbDataReader dr;
dr = Command.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
cmbDepartment.Items.Add(dr[0].ToString());
}
}
Connect.Close();
现在,当用户从组合框中选择一项时,它可以正常工作并在程序开始时填充 ComboBox。
我希望根据用户在第一个组合框中选择的部门来填充下一个组合框的项目。
Connect.Open();
Command.CommandText = "select JobTitle from Position where Department ='"+cmbDepartment.Text + "'";
OleDbDataReader dr2;
dr2 = Command.ExecuteReader();
if (dr2.HasRows)
{
while (dr2.Read())
{
cmbPosition.Items.Add(dr2[0]);
}
}
问题是,我的代码与我的同学完全相似,而我的代码异常长,我们无法调试。
从 cmbDepartment 中选择某些内容后发生错误。使用 try/catch,我收到以下错误消息:
System.Data.OleDb.OleDbException (0x80004005): IErrorInfo.GetDescription failed with E_FAIL(0x80004005).
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.OleDb.OleDbCommand.ExecuteReader()
at katapusan.Employee.cmbDepartment_TextChanged(Object sender, EventArgs e) in c:\Users\Matt\Documents\Visual Studio 2012\Projects\katapusan\katapusan\Employee.cs:line 423