[英]WebMethod throws “Incorrect syntax near '='”
我在这条线上出现错误: using (SqlDataReader reader =cmd.ExecuteReader())
我正在ASP.Net中研究AJAX级联下拉示例,下面是我的代码。 由于错误,我无法运行代码
'='附近的语法不正确。 在附近使用(SqlDataReader reader = cmd.ExecuteReader())
码
[WebMethod]
public AjaxControlToolkit.CascadingDropDownNameValue[] GetDropDownCountry1(string knownCategoryValues)
{
// select CountryId, Country from Country where Status='Active'
// string query = "SELECT Country, CountryId FROM Country";
string query = "select [CountryName], [CountryId] from Countries";
List<AjaxControlToolkit.CascadingDropDownNameValue> countries = GetData(query);
return countries.ToArray();
}
private List<AjaxControlToolkit.CascadingDropDownNameValue> GetData(string query)
{
string conString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlCommand cmd = new SqlCommand(query);
List<AjaxControlToolkit.CascadingDropDownNameValue> values = new List<AjaxControlToolkit.CascadingDropDownNameValue>();
using (SqlConnection con = new SqlConnection(conString))
{
con.Open();
cmd.Connection = con;
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
values.Add(new AjaxControlToolkit.CascadingDropDownNameValue
{
name = reader[0].ToString(),
value = reader[1].ToString()
});
}
reader.Close();
con.Close();
return values;
}
}
}
string state = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)["StateId"];
string query = string.Format("select [CityName], [CityId] FROM Cities where StateId = {0}", state);
如果state是类似于“ CA”的字符串,则这将生成无效的SQL语句“从StateId = CA的城市中选择[CityName],[CityId]”。 作为字符串传递的值需要加引号。 但是,不要只是在引号“ {0}”前后加上引号-正确的解决方法是使用参数化查询并将StateId作为参数传递。 就像是:
string sql = "select [CityName], [CityId] FROM Cities where StateId = @stateId"
cmd.Parameters.Add("stateId", stateId);
这样可以更有效地保护您免受SQL注入 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.