我正在尝试将文本框的值与数据库中的数据进行比较,如果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();
}
}
答案 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)
我希望你必须对代码进行两处修改。
“UPDATE StockDetails Set UnitAvailable =”+ unitavailable1 +“WHERE StockID = 3”。
试试这个......希望这会有用......