我正在开展一个项目 - 在线电影票务系统.... 在此,当用户输入他想要预订的座位数时,他进入支付页面。单击“付款”按钮,如何减少用户在SQL Server中输入的席位数。
SqlConnection con;
SqlCommand cmd;
private void update()
{
string a, b;
int c;
con = new SqlConnection("server=.;uid=sa;pwd=mayank;database=movie");
a = Session["timings"].ToString();
b = Session["seats"].ToString();
c = Convert.ToInt32(b);
con.Open();
cmd = new SqlCommand("update bodyguard set silver_class = silver_class ' " + - c + " 'where timings = ' " + a + "' ", con);
cmd.ExecuteNonQuery();
con.Close();
}
使用此代码会引发异常....所以请帮助我。
答案 0 :(得分:0)
您的SQL命令错误,您生成的是:
更新保镖集silver_class = silver_class' - [valueC]'其中,时间='[valueA]'
例如,你在where
之前忘记了一个空格,我不确定silver_class部分应该如何看待,因为你不清楚你想要在那里实现什么。
答案 1 :(得分:0)
你的整数值周围有一些单引号。试试这个
"update bodyguard set silver_class = (silver_class - " + c + ") where timings = '" + a + "'"
一点建议,您应该使用try{}catch{}
块来处理代码中的潜在错误。使用Convert.toInt32()
转换数字时,应尝试捕获FormatException。从con.open()
到con.close
,您可以尝试捕获SQLException
答案 2 :(得分:0)
不要使用连接字符串来创建SQL语句,这是非常糟糕的形式。这样做:
cmd = new SqlCommand("update bodyguard set silver_class = silver_class - @c where timings = @a", con);
cmd.Parameters.AddWithValue("@c", c);
cmd.Parameters.AddWithValue( "@", a);
答案 3 :(得分:0)
我建议参数化查询而不是易受SQL注入攻击的字符串连接。我建议你应该使用存储过程而不是内联SQL。