我试图通过使用选择命令来选择电影,一旦选中,就在标签上打印标题..效果很好。
下一部分是选中的电影然后在点击按钮时从数据库库存减1。这是我认为我感到困惑的地方,它在按钮点击发生之前没有显示任何错误。
更新查询的C#代码
protected void Button2_Click(object sender, EventArgs e)
{
var myquery = string.Format("UPDATE DVD SET Stock = Stock - 1");
da.InsertCommand = new OleDbCommand("INSERT INTO DVD (Stock) VALUES (@MessageLabel)", conn);
{
da.InsertCommand.Parameters.AddWithValue("@Stock", MessageLabel.Text);
conn.Open();
da.InsertCommand.ExecuteNonQuery();
using (OleDbCommand cmd = new OleDbCommand(myquery, conn))
cmd.ExecuteNonQuery();
conn.Close();
conn.Dispose();
}
}
选择事件的上一代码
public void Latest_DVD()
{
{
using (OleDbDataAdapter dataquer = new OleDbDataAdapter("SELECT Title,Category,Director,Stock,Year FROM DVD ", conn))
{
dataquer.Fill(dt);
}
}
DG_Latest.ShowHeader = true;
DG_Latest.DataSource = dt;
DG_Latest.DataBind();
conn.Close();
conn.Dispose();
}
protected void Latest_DVD_SelectedIndexChanged(Object sender, EventArgs e)
{
GridViewRow row = DG_Latest.SelectedRow;
MessageLabel.Text = "You selected to rent " + row.Cells[1].Text + ".";
}
所以我认为我的查询错误,可能也没有从标签中检索更新,但也许是选择它自己......我不确定。
它显示的错误是
Data type mismatch in criteria expression.
在连接打开后
答案 0 :(得分:2)
正如@afzalulh所说,取下插入部分。并将myquery字符串更改为:
var myquery = string.Format("UPDATE DVD SET Stock = Stock - 1 WHERE Title = @Title");
var row = DB_Latest.SelectedRow;
var title = row.Cells[0].Text;
var cmd = new OleDbCommand(myquery, conn);
cmd.Parameters.AddWithValue("@Title", title);
这样,您只能更新所选DVD标题的Stock。如果不添加WHERE子句,查询将减少所有DVD的库存。
答案 1 :(得分:1)
您想要更新库存,无需插入。我相信这就是你想要的:
protected void Button2_Click(object sender, EventArgs e)
{
var myquery = string.Format("UPDATE DVD SET Stock = Stock - 1");
conn.Open();
using (OleDbCommand cmd = new OleDbCommand(myquery, conn))
cmd.ExecuteNonQuery();
conn.Close();
conn.Dispose();
}
编辑: myquery
应包含har07建议的WHERE
。否则它会将所有DVD的库存减少1.