C# 将varchar转换为int失败

C# 将varchar转换为int失败,c#,asp.net,sql,C#,Asp.net,Sql,下面是组合框选定值更改的代码。它应该从DB中提取一个值,并将其显示在文本框中 protected void cmbPujaName_SelectedIndexChanged(object sender, EventArgs e) { SqlConnection con2 = null; con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["SRKBS

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

你缺少引用,但是不要这样做。这种方式就像敞开大门,邀请小偷进去参加茶话会。或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);

这样,您就不必乱用引号,而且您还可以更好地抵御黑客攻击。

您丢失了引号,但不要这样做。这种方式就像敞开大门,邀请小偷进去参加茶话会。或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);

这样,您就不必乱用引号,而且您还可以更好地抵御黑客攻击。

更好的做法是通过提及适当的数据类型来使用SqlCommand参数编写查询,以避免sql注入攻击。尝试处理空值

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

更好的做法是使用SqlCommand参数编写查询,通过提及适当的数据类型来避免sql注入攻击。尝试处理空值

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

请将错误添加到您的帖子中。请将错误添加到您的帖子中。感谢您的回复,我尝试了代码,但无法在文本框中显示值。txtAmount.Text=pamtds.Tables[0]。行[0][“金额”]。ToString();上面说IndexOutOfRangeException@Rajiv这是一个完全不同的问题。这意味着您在“PoojaDietyMaster”中没有任何与“cmbPujaName”下拉列表中的选定值完全匹配的记录。调试代码并查看此选定值是什么。注:据我所知,SQL match区分大小写。感谢您的指导。我在PujaName列中查询作为ID列值返回的选定值。将查询更改为右列名成功。感谢您的回复,我尝试了代码,但无法在文本框中显示值。txtAmount.Text=pamtds.Tables[0]。行[0][“金额”]。ToString();上面说IndexOutOfRangeException@Rajiv这是一个完全不同的问题。这意味着您在“PoojaDietyMaster”中没有任何与“cmbPujaName”下拉列表中的选定值完全匹配的记录。调试代码并查看此选定值是什么。注:据我所知,SQL match区分大小写。感谢您的指导。我在PujaName列中查询作为ID列值返回的选定值。将查询更改为右列名就成功了。