[英]There was a error parsing the query. [ Token line number = 1,Token line offset = 52,Token in error = ) ]
[英]“There was an error parsing the query. [Token line number = 1, Token line offset = 52,Token in error = Data]”
我试图根据以前的ComboBox的选择为ComboBox选择一组数据。 我一直被认为是第二种方法中的SELECT语句,但是我无法弄清楚为什么它不起作用。 当我运行应用程序时,我收到以下错误消息:“解析查询时出错。[令牌行号= 1,令牌行偏移量= 52,令牌错误=数据]”,我尝试使用Parameter.AddWithValue,cmd.Parameters .Add,并将值设置为字符串也无济于事。 有人介意教我如何正确解决此问题吗? 谢谢。
数据库的设置如下:
城市
公园
方法如下:
private void cboCities_SelectedIndexChanged(object sender, EventArgs e)
{
if (cboCities.SelectedIndex > -1)
{
SqlCeConnection cn = new SqlCeConnection(@"Data Source = \Program Files\ParkSurvey\ParkSurvey.sdf; Persist Security Info = False; Password = *");
cn.Open();
SqlCeCommand cmd = cn.CreateCommand();
cmd.CommandText = "SELECT Name FROM [Parks] WHERE CityId =" + cboCities.SelectedValue + "ORDER BY Name ASC";
SqlCeDataAdapter da = new SqlCeDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
cn.Close();
cboParks.ValueMember = "ParkId";
cboParks.DisplayMember = "Name";
cboParks.DataSource = ds.Tables[0];
cboParks.SelectedIndex = -1;
}
我知道您提到您尝试对查询进行参数设置,但是如果您现在发布的代码引发了错误,那么我认为这与以下事实有关:您在“ ORDER BY”之前缺少空格; 否则,执行的查询将类似于:
SELECT Name FROM [Parks] WHERE CityId =5ORDER BY Name ASC;
这显然是无效的SQL。
您的查询应为:
"SELECT Name FROM [Parks] WHERE CityId =" + cboCities.SelectedValue + " ORDER BY Name ASC";
话虽如此,我将着眼于参数化查询以避免SQL注入攻击。 使用cmd.Paramters.AddWithValue
比编写此内联SQL语句更好。
您的查询可以这样写:
"SELECT Name FROM [Parks] WHERE CityId = @CityID ORDER BY Name ASC";
您可以这样添加参数:
cmd.Parameters.AddWithValue("@CityID",cboCities.SelectedValue);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.