无法将值从下拉列表选定值传递到 SQL WHERE 子句

Unable to pass value to SQL WHERE clause from dropdownlist selected value

我正在尝试将值从下拉列表传递到 sql 查询 WHERE 子句,但它失败了并且没有返回任何值但是当我直接在 WHERE 中给出值时它工作正常唯一的问题是来自 addwithvalue命令它没有传递值。当我 运行 时,它显示为行 'string champ = dt.Rows[0]["mc"].ToString(); 中的位置 0 没有值; ' 请检查并帮助,

            string query = "SELECT mc, tower, image from datatable WHERE month= '@month' AND mc IS NOT NULL AND image IS NOT NULL";
            SqlCommand cmd = new SqlCommand(query, con);
            cmd.Parameters.AddWithValue("@month", ChampMonth.SelectedValue);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            cmd.ExecuteScalar();
            DataTable dt = new DataTable();
            sda.Fill(dt);
            string champ = dt.Rows[0]["mc"].ToString();
            string tower = dt.Rows[0]["tower"].ToString();
            string img = dt.Rows[0]["image"].ToString();
            Label1.Text = champ;
            Label2.Text = tower;
            img = Server.MapPath(img);
            Image1.ImageUrl = img;
        }

您的代码可以如下所示:

        string query = "SELECT mc, tower, image from datatable WHERE month = @month " +
                       "AND mc IS NOT NULL AND image IS NOT NULL";

        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            cmd.Connection.Open();

            cmd.Parameters.Add("@month", SqlDbType.NVarChar).Value = ChampMonth.SelectedValue;

            DataTable dt = new DataTable();
            dt.Load(cmd.ExecuteReader());

            if (dt.Rows.Count > 0) {
                Label1.Text = dt.Rows[0]["mc"].ToString();
                Label2.Text = dt.Rows[0]["tower"].ToString();
                string img = Server.MapPath(dt.Rows[0]["image"].ToString());
                Image1.ImageUrl = img;
            }
        }

几件事:

The sql command object has a connection object - no need to create one
The sql command object has a reader built in - no need to create one
The sql command object has a command text.

如果要在代码中更新数据 table 对象,则只需要数据适配器。

而且你没有显示 how/when 你创建了你的连接对象。

您应该 post 驱动下拉列表(组合框)的标记,因为不清楚它是 returns 1-12 还是实际文本 - 那部分可能仍然是错误的。