MS-Access:SQL UPDATE语法错误,但为什么?

时间:2011-01-13 09:53:04

标签: sql ms-access syntax-error

我在这个SQL中遇到语法错误,似乎无法找出原因?

SQL UPDATE在错误上返回此信息:

UPDATE Tankstationer 
SET Long='12.5308724', Lat='55.6788735' 
WHERE Id = 2;

这是我的代码:

foreach (var row in reader)
{
   var id = reader.GetInt32(0);
   var adress = reader.GetString(1);
   var zip = reader.GetDouble(2);
   var city = reader.GetString(3);
   var adressToParse = adress + " " + zip + " " + city;

   GMapGeocoder.Containers.Results result = Util.Geocode(adressToParse, key);
   foreach (GMapGeocoder.Containers.USAddress USAdress in result.Addresses )
   {
      var google_long = convertNumberToDottedGoogleMapsValid(USAdress.Coordinates.Longitude);
      var google_lat = convertNumberToDottedGoogleMapsValid(USAdress.Coordinates.Latitude);
      Message.Text = "Lattitude: " + google_long + System.Environment.NewLine;
      Message.Text = "Longitude: " + google_lat + System.Environment.NewLine;
      string updatesql = "UPDATE Tankstationer SET Long='" +google_long+ "', Lat='" +google_lat+ "' WHERE Id = " +id+"";
      OleDbCommand update = new OleDbCommand();
      update.CommandText = updatesql;
      update.Connection = conn;
      reader = update.ExecuteReader();
      Message.Text = "Done";
   }
}

4 个答案:

答案 0 :(得分:3)

错误可能是因为您正在执行阅读器,但您的查询不会返回任何内容。请改为呼叫update.ExecuteNonQuery()

答案 1 :(得分:0)

尝试使用update.ExecuteNonQuery()而不是reader。

看到其他评论为时已晚。

我不经常使用访问权限,但是我使用<“>作为文本分隔符,而不是<'>

答案 2 :(得分:0)

尝试:

“id”被设置为Int32(var id = reader.GetInt32(0);)但你将它连接到一个字符串(WHERE Id =“+ id +”“;)。确保将id转换为字符串值而不是int。

答案 3 :(得分:0)

“Long”是Access中的保留字。如果您无法更改架构以将该列调用为其他内容,请将其放在括号中:

UPDATE Tankstationer
  SET [Long]='12.5308724', Lat='55.6788735'
  WHERE Id = 2;