将文本框的数据与数据库进行比较,并使用新值更新数据库

时间:2014-11-23 06:14:37

标签: c# asp.net ado.net

我正在尝试将文本框的值与数据库中的数据进行比较,如果textbox中的值大于数据库中的数据值,则会显示一条警告消息,如果它小于数据的值在datebase中,它将使用textbox的值减去数据库值并更新数据库的值。没有错误但是当我点击按钮时,没有任何内容出现,也没有对数据库进行任何更改。我的代码有什么问题吗? THX

protected void btn_buy_Click(object sender, EventArgs e)
{


    hookUp = new SqlConnection("Server=localhost\\SqlExpress;Database=VoteNow;" +
    "Integrated Security=True" );
    sqlCmd = new SqlCommand("SELECT  UnitAvailable  FROM stockdetails1 WHERE StockID = 3", hookUp);
    hookUp.Open();
    reader = sqlCmd.ExecuteReader();
    int amountkey;
    amountkey = Convert.ToInt32(amount.Text);
    while (reader.Read())
    {
        int unitavailable = reader.GetInt32(0);
        int unitavailable1;
        if (amountkey <= unitavailable)
        {
           unitavailable1 = unitavailable - amountkey;
            SqlCommand sqlupdateCmd = new SqlCommand("UPDATE StockDetails Set UnitAvailable = '+unitavailable1+' WHERE StockID = 3", hookUp);

            sqlupdateCmd.ExecuteNonQuery();

            Response.Write("<script LANGUAGE='JavaScript'> alert('The units available is enough.')</script>"); 
        }
        else 
        {
            Response.Write("<script LANGUAGE='JavaScript'> alert('The units available is not enough.')</script>");

        }
    }
    reader.Close();
    hookUp.Close();
}

}

2 个答案:

答案 0 :(得分:1)

更新命令后您缺少sqlupdateCmd.ExecuteNonQuery()。 此外,我不明白为什么你在else代码块中再次提醒相同的消息?另一件事是,可能UnitAvailable是单个值,因此不使用ExecuteReader使用ExecuteScalar

另外,考虑使用using来实现代码,这些代码将处理昂贵的资源,例如连接和命令对象。请检查this以获取更多信息。

您的Javascript警告应如下所示: -

Response.Write("<script type=\"text/javascript\">alert('The units available is not enough.')</script>");

更新2:

如上所述,请使用ExecuteScalar,如下所示: -

sqlCmd = new SqlCommand("SELECT  UnitAvailable  FROM StockDetails WHERE StockID = 3", hookUp);
hookUp.Open();
int unitavailable = Convert.ToInt32(sqlCmd.ExecuteScalar());
int amountkey;
amountkey = Convert.ToInt32(amount.Text);
int unitavailable1;
if (amountkey <= unitavailable)
{
    Response.Write("<script LANGUAGE='JavaScript'> alert('The units available is not enough.')</script>");
}
else
{
     unitavailable1 = unitavailable - amountkey;
     SqlCommand sqlupdateCmd = new SqlCommand("UPDATE StockDetails Set UnitAvailable = @unitavailable1 WHERE StockID = 3", hookUp);
     sqlupdateCmd.Parameters.Add("@unitavailable1",SqlDbType.Int).Value = unitavailable1;
     sqlupdateCmd.ExecuteNonQuery();
}

答案 1 :(得分:0)

我希望你必须对代码进行两处修改。

  1. U应该在更新语句之后添加ExecuteNonQuery。
  2. 此外,变量unitavailable1(新的可用单位)已在引号内提供。因此,该值可能未被替换。尝试在此之前关闭引号并在变量之后打开它并使用“+”将它们连接起来
  3. “UPDATE StockDetails Set UnitAvailable =”+ unitavailable1 +“WHERE StockID = 3”。

    试试这个......希望这会有用......