C# WebMethod抛出“靠近“=”的语法不正确”

C# WebMethod抛出“靠近“=”的语法不正确”,c#,sql,asp.net,sql-server,web-services,C#,Sql,Asp.net,Sql Server,Web Services,我在这行中遇到错误: 使用SqlDataReader=cmd.ExecuteReader 我正在ASP.Net中开发AJAX级联下拉示例,下面是我的代码。由于错误,我无法运行代码 “=”附近的语法不正确。接近使用SqlDataReader=cmd.ExecuteReader 代码 如果state是类似于CA的字符串,那么这将从StateId=CA的城市生成SQL语句select[CityName],[CityId],这是无效的。作为字符串传递的值需要引用。但不要只是在{0}周围加引号,正确的解决

我在这行中遇到错误: 使用SqlDataReader=cmd.ExecuteReader

我正在ASP.Net中开发AJAX级联下拉示例,下面是我的代码。由于错误,我无法运行代码

“=”附近的语法不正确。接近使用SqlDataReader=cmd.ExecuteReader

代码

如果state是类似于CA的字符串,那么这将从StateId=CA的城市生成SQL语句select[CityName],[CityId],这是无效的。作为字符串传递的值需要引用。但不要只是在{0}周围加引号,正确的解决方法是使用参数化查询并将StateId作为参数传递。比如:

string sql = "select [CityName], [CityId] FROM Cities where StateId = @stateId"
cmd.Parameters.Add("stateId", stateId);

这会更高效,并保护您不受影响。

CountryId和StateId是如何存储在数据库中的?作为int或VARCHAR?我建议运行SQL Profiler,看看生成的查询有什么问题。或者打印您的查询并对SQL Server CountryId和StateId运行它,StateId为int格式@ugh在将“{0}”放入country和next state and city后,将不会加载填充的值@乌海
string state = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)["StateId"];
string query = string.Format("select [CityName], [CityId] FROM Cities where StateId = {0}", state);
string sql = "select [CityName], [CityId] FROM Cities where StateId = @stateId"
cmd.Parameters.Add("stateId", stateId);