无法将值从下拉列表选定值传递到 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 还是实际文本 - 那部分可能仍然是错误的。
我正在尝试将值从下拉列表传递到 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 还是实际文本 - 那部分可能仍然是错误的。