我有一个 SQL Server 数据库,我正在尝试查询它。首先,我从名为 的表中检索所有名称和 id Firms
,用它来填充ListBox
. 当我单击该列表框中的一个项目时,我想ListBox
用为该公司工作的员工填充另一个项目。
我使用这个查询(在 SQL Server 2008 中测试)
SELECT
employee.Name
From
employee, Firm
WHERE
Firm.Name = 'Some Firm' AND
Firm.F_Id = employee.F_Id
这是单击列表框项的代码:
private void Firm_ListBox_SelectedIndexChanged(object sender, EventArgs e)
{
String Name = "";
Int32 F_Id = -1;
// This for would be useful later on in the program
// For now it can be ignored
for (int i = 0; i < Firms.Count(); i++)
{
if (Firms.ElementAt(i).GetFirmName().Equals(Firm_ListBox.SelectedItem.ToString()))
{
Name = Firms.ElementAt(i).GetFirmName();
F_Id = Firms.ElementAt(i).GetF_Id();
}
}
MessageBox.Show(Name.ToString() + "\n\t" + F_Id.ToString()); // first message box
SqlCommand SqlCommand = new SqlCommand(
"SELECT employee.Name From employee, Firm WHERE Firm.Name = " + "'" +
Name + "'" + " AND Firm.F_Id = employee.F_Id", SqlConnection);
SqlDataReader SqlDataReader = SqlCommand.ExecuteReader();
MessageBox.Show("Test: " + SqlDataReader.GetString(1)); // second message box
Employee_ListBox.Items.Clear();
while (SqlDataReader.Read())
{
Employee_ListBox.Items.Add(SqlDataReader.GetString(1));
MessageBox.Show(SqlDataReader.GetString(1));
}
SqlDataReader.Close();
}
第一个MessageBox
有效,但第二个没有出现。我不知道这里发生了什么(更不用说我ListBox
的没有被填充)。
编辑在调试时,我意识到在读取操作之后,当我尝试获取字符串时,我得到了一个可怕的异常(我添加了一个 try-catch 块)。我什至无法开始阅读它,除了这个
不存在数据时尝试读取无效。
吸引住了我的眼球。然而我无法解释。连接有效,我测试过的查询。即使它没有返回任何东西......它不应该什么都不打印并移动一个吗?
EDIT2似乎我得到了一个无效的操作异常,不是在阅读器上,而是在消息框上。