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
は機能しますが、2番目は表示されません。私はここで何が起こっているのか分かりません(言うまでもなく、私ListBox
は移入されません)。
編集デバッグ中に、読み取り操作の後で、文字列を取得しようとすると、ひどい例外が発生することに気付きました(try-catchブロックを追加しました)。これ以外は読み始めることすらできません
データが存在しない場合の読み取りの試行が無効です。
目を引いた。それでも説明できません。接続は機能します。私がテストしたクエリです。そして、それが何も返さなかったとしても...それはただ何も印刷せずに1つ移動するべきではありませんか?
EDIT2リーダーではなく、メッセージボックスで無効な操作例外が発生したようです。