我的逻辑是否正确?我试图从组合框(dropdownlist)获取数据并使用该数据在checkedlistbox中搜索和显示信息

时间:2014-01-27 13:11:10

标签: c# winforms visual-studio-2010 search combobox

每当我进行搜索时,我都会收到此错误:无效的列名称'datafromcombobox'

我尝试在我的SQL查询中对数据进行硬编码,但它确实有效。知道我的代码有什么问题吗?

以下是代码:

        string selectedMedication = cboMedicationType.SelectedItem.ToString();

        string strMedications = "SELECT medicationName FROM MEDICATION WHERE medicationType= (" + selectedMedication + ")";
        SqlCommand cmdMedications = new SqlCommand(strMedications, connection);

        connection.Open();
        SqlDataReader readMedications = cmdMedications.ExecuteReader();

        while (readMedications.Read())
        {
            string medicationVar = readMedications["medicationName"].ToString();
            clbMedication.Items.Add(medicationVar, true);

        }
        readMedications.Close();
        connection.Close();

2 个答案:

答案 0 :(得分:0)

我想你只是忘记了查询中的引号。 这应该有效:

string strMedications = "SELECT medicationName FROM MEDICATION WHERE medicationType=   ('" + selectedMedication + "')";

答案 1 :(得分:0)

我会这样做:

using (SqlCommand cmdMedications = new SqlCommand(strMedications, connection))
{
    string strMedications = "SELECT medicationName FROM MEDICATION WHERE medicationType = @selectedMedication;
    command.Parameters.AddWithValue("selectedMedication", cboMedicationType.SelectedItem.ToString());
    connection.Open();
    using (SqlDataReader readMedications = cmdMedications.ExecuteReader())
    {
        while (readMedications.Read())
        {
            string medicationVar = readMedications["medicationName"].ToString();
            clbMedication.Items.Add(medicationVar, true);
        }
    }
    connection.Close();
}

我改变了几件事:

  • 始终使用参数化查询。如果不这样做,您可能会成为SQL Injection的受害者。我在你的代码中改变了它。
  • 通常最好在代码中使用usingsee this article),因为那时您不需要closedispose个对象 - {{1语句负责处理。
  • 至于你的错误,你的查询可能是一个错误,但我的代码应该照顾它。

如果我能清除别的东西,请告诉我。我希望这有帮助!

P.S。我主要是在没有调试的情况下输入这个,所以可能有一些小东西你可能需要调整,但我觉得你应该得到它的要点。