在选择上减少库存量

时间:2013-12-22 05:19:58

标签: c# asp.net sql visual-studio-2012 insert-update

我试图通过使用选择命令来选择电影,一旦选中,就在标签上打印标题..效果很好。

下一部分是选中的电影然后在点击按钮时从数据库库存减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.

在连接打开后

2 个答案:

答案 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.