将varchar转换为int失败

时间:2013-11-17 11:48:32

标签: c# asp.net sql

以下是组合框选择值更改的代码。它应该从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();            
}

2 个答案:

答案 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);