MS-Access: ошибка синтаксиса SQL UPDATE, но почему? - PullRequest
2 голосов
/ 13 января 2011

Я получаю синтаксическую ошибку в этом 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 ]

3 голосов
/ 13 января 2011

Возможно, ошибка в том, что вы выполняете программу чтения, но ваш запрос ничего не возвращает. Позвоните update.ExecuteNonQuery() вместо.

0 голосов
/ 13 января 2011

«Длинный» - зарезервированное слово в Access.Если вы не можете изменить схему для вызова этого столбца как-то иначе, поместите ее в квадратные скобки:

UPDATE Tankstationer
  SET [Long]='12.5308724', Lat='55.6788735'
  WHERE Id = 2; 
0 голосов
/ 13 января 2011

Попробуйте:

"id" устанавливается в Int32 (var id = reader.GetInt32 (0);), но вы объединяете его в строку (WHERE Id = "+ id +" ";)Убедитесь, что id приведен как строковое значение, а не как int.

0 голосов
/ 13 января 2011

попробуйте использовать update.ExecuteNonQuery () вместо считывателя.

Видел другие комментарии слишком поздно.

Я не часто использую доступ, но у меня он использует <"> для разделения текста, а не <'>

...