私は患者にリンクされたアレルギー(下記画像参照)と薬をリンクしたアレルギーをチェックする警告システムを作りようとしています。 SQLDataReaderが読んでいません
私はコードを実行するとSQLDataReaderを完全にスキップするように見えますが、私はif(reader.HasRows)のチェックを行い、読者には行がないことを示しています。私がしたいのは、読者の末尾に選択したアレルギー名のメッセージボックスを表示することだけです。私はSQL Server 2014を使用しています。どんな助けも大歓迎です。すべてのあなたのSqlCommandオブジェクトの
private void button_addItem_Click(object sender, RoutedEventArgs e)
{
if (!string.IsNullOrEmpty(comboBox_select_Item.Text.ToString()))
{
using (SqlConnection conn = new SqlConnection(connection))
{
try
{
SqlCommand sqlCmd2 = new SqlCommand("SELECT allergyName, allergyDescription FROM Allergies A INNER JOIN PatientAllergies PA ON A.allergyID = PA.allergyID WHERE A.allergyID = PA.allergyID AND PA.allergyID = (SELECT allergyID FROM Medication_Allergies MA WHERE MA.medID = " + comboBox_select_Item.SelectedValue.ToString() + ")", conn);
conn.Open();
SqlDataReader sqlReader = sqlCmd2.ExecuteReader();
Allergies allergies = new Allergies();
while (sqlReader.Read())
{
allergies.allergyName = Convert.ToString(sqlReader["allergyName"]);
allergies.allergyDescription = Convert.ToString(sqlReader["allergyDescription"]);
}
MessageBox.Show(allergies.allergyName);
sqlReader.Close();
FillSalesItemGrid();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), ex.ToString());
}
}
}
}
おそらくクエリはゼロ行を返します。 –
私はちょうどどのように見ていない、私は私の声明をトレースして、それは値を返す必要があります。 –
また、SQLからエラーが発生している可能性があります。 ExecuteReaderは.NETエラーとしてSQLエラーを検出しません。作成している文字列を取得してSSMSで実行できますか? また、あなたのコードがインジェクション攻撃に対して脆弱であることを指摘していない場合は、私は残念です。 – Xedni