以下是组合框选择值更改的代码。它应该从DB中获取一个值并将其显示在文本框中。
protected void cmbPujaName_SelectedIndexChanged(object sender, EventArgs e)
{
SqlConnection con2 = null;
con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["SRKBSDB"].ConnectionString);
SqlDataAdapter pamt = new SqlDataAdapter("select Amount from PoojaDietyMaster where PoojaName =" + cmbPujaName.SelectedValue, con2);
DataSet pamtds = new DataSet();
pamt.Fill(pamtds); ......... Error shown here...........
txtAmount.Text = pamtds.Tables[0].Rows[0]["Amount"].ToString();
}
答案 0 :(得分:4)
你缺少引号但...... 不要这样做。这种方式就像是敞开大门,邀请小偷进行茶话会。或SQL注入攻击,邀请黑客窃取您的整个数据库和/或服务器并完全控制它。
请改为使用此类代码:
SqlDataAdapter pamt = new SqlDataAdapter("select Amount from PoojaDietyMaster where PoojaName = @name", con2);
pamt.SelectCommand.Parameters.AddWithValue("@name", cmbPujaName.SelectedValue);
DataSet pamtds = new DataSet();
pamt.Fill(pamtds);
通过这种方式,你不必乱用引号,而且你可以更好地防范黑客攻击。
答案 1 :(得分:0)
通过提及正确的数据类型来避免sql注入攻击,使用SqlCommand参数编写查询是一种更好的做法。尝试处理空值。
SqlDataAdapter pamt = new SqlDataAdapter("select Isnull(Amount,0.0) Amount from PoojaDietyMaster where PoojaName = @name", con2);
pamt.SelectCommand.Parameters.Add("@name",SqlDbType.VarChar).Value = cmbPujaName.SelectedValue.tostring();
DataSet pamtds = new DataSet();
pamt.Fill(pamtds);