|
duh_si 569 / 169 / 22 Регистрация: 18.10.2012 Сообщений: 912 |
||||
|
1 |
||||
|
11.07.2014, 10:50. Показов 1437. Ответов 14 Метки нет (Все метки)
День добрый.
Пишет: Ошибка синтаксиса в инструкции UPDATE Подскажите пожалуйста в чем причина…
0 |
|
26799 / 14478 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
|
|
11.07.2014, 11:24 |
2 |
|
Самая вероятная причина это пустое (NULL) значение в одной из числовых переменных. Тогда собранная строка имеет знак равенства за которым следует запятая. Конечно, это ошибка.
1 |
|
569 / 169 / 22 Регистрация: 18.10.2012 Сообщений: 912 |
|
|
11.07.2014, 11:29 [ТС] |
3 |
|
mobile, тоже очень частый — какие-то переменные имеют текстовый тип и должны окаймляться апострофами. с этим уже столкнулся, это поправил все mobile, причина это пустое (NULL) вы скорее всего правы в этом, подскажите как это можно обработать ?
0 |
|
mobile 26799 / 14478 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||
|
11.07.2014, 11:32 |
4 |
|||
|
Решение
как это можно обработать ? Пример для поля Количество
Такая запись, при пустом значении запишет NULL в собранное SQL-выражение.
1 |
|
duh_si 569 / 169 / 22 Регистрация: 18.10.2012 Сообщений: 912 |
||||
|
11.07.2014, 11:33 [ТС] |
5 |
|||
|
вот так примерно все выглядит
0 |
|
1266 / 448 / 129 Регистрация: 21.03.2013 Сообщений: 1,210 |
|
|
11.07.2014, 12:10 |
6 |
|
надо всего лишь собранную строку распечатать (Debug.Print) подскажите как дебугом пользоваться? пожалуйста или где почитать доходчиво можно
0 |
|
shanemac51 Модератор 11534 / 4743 / 765 Регистрация: 07.08.2010 Сообщений: 13,793 Записей в блоге: 4 |
||||
|
11.07.2014, 12:11 |
7 |
|||
|
а должен выглядеть примерно так
хотя будет ерунда, если данного номера нет или их несколько
2 |
|
8815 / 5742 / 581 Регистрация: 27.03.2013 Сообщений: 19,279 |
|
|
11.07.2014, 14:40 |
8 |
|
Возможно вопрос по теме. Миниатюры
0 |
|
8815 / 5742 / 581 Регистрация: 27.03.2013 Сообщений: 19,279 |
|
|
11.07.2014, 15:13 |
9 |
|
На все другие ремы навожу, такого нет, а у вас не пропадает. Добавлено через 28 минут
0 |
|
duh_si 569 / 169 / 22 Регистрация: 18.10.2012 Сообщений: 912 |
||||
|
15.07.2014, 12:29 [ТС] |
10 |
|||
|
подскажите как можно обработать переменные в которых дата,
ругается на запрос update Несоответствие типов данных в выражении условия отбора.
0 |
|
shanemac51 Модератор 11534 / 4743 / 765 Регистрация: 07.08.2010 Сообщений: 13,793 Записей в блоге: 4 |
||||
|
15.07.2014, 14:50 |
11 |
|||
|
но сохранить запись нужно с этими пустыми полями сие не заметила, но и без этого орехов много
0 |
|
569 / 169 / 22 Регистрация: 18.10.2012 Сообщений: 912 |
|
|
15.07.2014, 15:23 [ТС] |
12 |
|
shanemac51, использую ваш код, Миниатюры
0 |
|
Модератор 11534 / 4743 / 765 Регистрация: 07.08.2010 Сообщений: 13,793 Записей в блоге: 4 |
|
|
15.07.2014, 15:38 |
13 |
|
у меня вашей базы нет —проверить не смогла (а2007) может дело в том, что у вас нет какой-то даты
0 |
|
569 / 169 / 22 Регистрация: 18.10.2012 Сообщений: 912 |
|
|
15.07.2014, 15:57 [ТС] |
14 |
|
shanemac51, может дело в том, что у вас нет какой-то даты в том то и дело, поля с датами остаются пустыми ( эти поля пользователю не обязательно сразу нужно заполнять, как нужно будет он заполнит ) , соответственно и в переменных пусто, а когда UPDATE делаю, код ругается что в переменных нет ничего, а мне нужно чтобы он не обращал на это внимание, просто тупо перезаписывал пустоту
0 |
|
shanemac51 Модератор 11534 / 4743 / 765 Регистрация: 07.08.2010 Сообщений: 13,793 Записей в блоге: 4 |
||||
|
15.07.2014, 16:42 |
15 |
|||
|
проверка на пустые поля
1 |
I’m getting a syntax error in this SQL, and can’t seem to figure out why?
The SQL UPDATE returns this on the error:
UPDATE Tankstationer
SET Long='12.5308724', Lat='55.6788735'
WHERE Id = 2;
Here’s my code:
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";
}
}
marc_s
737k176 gold badges1337 silver badges1463 bronze badges
asked Jan 13, 2011 at 9:53
7
The error is probably because you are executing a reader, but your query does not return anything. Call update.ExecuteNonQuery() instead.
answered Jan 13, 2011 at 9:58
cjkcjk
45.9k9 gold badges81 silver badges112 bronze badges
0
«Long» is a reserved word in Access. If you can’t change the schema to call that column something else, put it in brackets:
UPDATE Tankstationer
SET [Long]='12.5308724', Lat='55.6788735'
WHERE Id = 2;
answered Jan 13, 2011 at 18:58
RolandTumbleRolandTumble
4,6433 gold badges32 silver badges37 bronze badges
try using update.ExecuteNonQuery() instead of reader.
Saw other comments too late.
I don’t use access often, but mine it’s using <«> for text delimiter, not <‘>
answered Jan 13, 2011 at 10:00
mslliviumslliviu
1,0982 gold badges12 silver badges30 bronze badges
2
Try:
«id» is being set to Int32 (var id = reader.GetInt32(0);) but you are concatenating it to a string (WHERE Id = » +id+»»;). Make sure that id is cast as a string value and not an int.
answered Jan 13, 2011 at 10:14
Darryl PetersonDarryl Peterson
2,2501 gold badge16 silver badges13 bronze badges
1
- Remove From My Forums
-
Question
-
In this code I use an Access database…
OleDbDataReader rdr = acmd.ExecuteReader();
…
rdr.Close();
The code works fine up to this point. I successfully read from the Clients and WPClients tables in the database.
Right after that I set a different command…
q = «Update Clients Set Found = ‘200550’ Where ID = ‘100020’»;
acmd.CommandText = q;
acmd.ExecuteNonQuery();
This throws «Syntax error in UPDATE statement.»
The connection to the Access database is still open.However, when I open the .mdb file in Access and paste the exact same command into the SQL view of a query, it runs fine.
Why can’t I run the update statement from C#?
Answers
-
Have you tried to ‘bracket’ the fields?
«Update [Clients] Set [Found]=’200550′ where [ID]=’100020′;»
If that doesn’t work, you can also parameterize your sql:
q = «Update [Clients] set [Found]=? where [ID]=?);
OleDbParameters[] parameters =
{
new OleDbParameter(«?», «2005500»),
new OleDbParameter(«?», «100020»)
};acmd.CommandText = q;
acmd.Parameters.AddRange(parameters);I like to parameterize any strings that I use in my queries. This ensures that they are handled correctly without having to be parsed.
public enum Answers
{
Everything = 0x2A
}-
Marked as answer by
Tuesday, November 3, 2009 6:07 PM
-
Marked as answer by
I have a datagridview. I fatch data from database and show in this gridview. But when I try to update it by clicking a button it shows an error.
try
{
string update = "update Tank_Head set Item_Code='?', Opening_Bal='?', Tank_Description='?', where Tank_Unit='?' and companyID='?'";
OleDbCommand cmd = new OleDbCommand(update, con);
cmd.Parameters.AddWithValue("@Item_Code", cbItemEdit.Text);
cmd.Parameters.AddWithValue("@Opening_Bal", txtOpeningBalanceEdit.Text);
cmd.Parameters.AddWithValue("@Tank_Description", txtTankDesEdit.Text);
cmd.Parameters.AddWithValue("@Tank_Unit", txtTankUnitEdit.Text);
cmd.Parameters.AddWithValue("@companyID", label1.Text);
i = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
finally
{
con.Close();
if (i != 0)
{
pnlView.Visible = true;
pnlEdit.Visible = false;
}
}
asked Sep 11, 2013 at 11:30
Animesh GhoshAnimesh Ghosh
3318 gold badges17 silver badges28 bronze badges
2
You’ve got a stray comma in there:
update Tank_Head set Item_Code='?', Opening_Bal='?', Tank_Description='?', <<< where Tank_Unit='?' and companyID='?'
Remove that and it should work fine:
update Tank_Head set Item_Code='?', Opening_Bal='?', Tank_Description='?' where Tank_Unit='?' and companyID='?'
answered Sep 11, 2013 at 11:33
CodingIntrigueCodingIntrigue
76.5k30 gold badges171 silver badges176 bronze badges
There is extra , in your query before where
replace your query like this
string update = "update Tank_Head set Item_Code='?', Opening_Bal='?', Tank_Description='?' where Tank_Unit='?' and companyID='?'";
answered Sep 11, 2013 at 11:33
Microsoft DNMicrosoft DN
9,78610 gold badges52 silver badges71 bronze badges
You have a comma after the last field being updated causing error. Try changing the statement to
string update = "update Tank_Head set Item_Code='?', Opening_Bal='?', Tank_Description='?' where Tank_Unit='?' and companyID='?'";
answered Sep 11, 2013 at 11:34
MurCode
- Форумы
- Поиск
- О проекте
Pasha_Sem
Дата: 05.02.2007 16:05:46
Все привет !
Пытаюсь в таблицу Access добавить значение! выдает сообщение
Ошибка синтаксиса в инструкции UPDATE
Кто сталкивался подскажите где ошибка?
ataSet myDataSet = new DataSet();
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter();
private void button3_Click(object sender, EventArgs e)
{
string connectionString = «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=BugTypes.MDB»;
string select = «UPDATE Categories» + » SET Category Name = ‘HI’ » + » WHERE Category ID = ‘3’»;
OleDbConnection testConnection = new OleDbConnection(connectionString);
testConnection.Open();
// OleDbCommand testCommand = new OleDbCommand(«SELECT * FROM Categories», testConnection);
OleDbCommand testCommand = new OleDbCommand(select, testConnection);
int rowsReturn = testCommand.ExecuteNonQuery();
testConnection.Close();
}
}
}
Спасибо!
HandKot
Дата: 05.02.2007 16:48:41
| автор |
| SET Category Name = ‘HI’ » + » WHERE Category ID = ‘3’» |
если нет символа подчеркивания, тогда названия полей надо взять в квадратные скобки
SET [Category Name] = 'HI' " + " WHERE [Category ID] = '3'"
вроде так
I Have Nine Lives You Have One Only
THINK!
Pasha_Sem
Дата: 05.02.2007 17:55:44
Исправленный синтаксис теперь верен
после таких изминений
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
// The insertSQL string contains a SQL statement that
// inserts a new row in the source table.
OleDbCommand command = new OleDbCommand(«UPDATE Categories SET [Category Name] = ‘Привет’ WHERE [Category ID] = 1», connection);
// Set the Connection to the new OleDbConnection.
command.Connection = connection;
// Open the connection and execute the insert command.
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
но появляеться исключение
Отсутствует значениедля одного или нескольких требуемых параметров
Таже истормя при оригенальном коде! что и в первом примере
HandKot
Дата: 06.02.2007 09:08:55
| автор |
| но появляеться исключение Отсутствует значениедля одного или нескольких требуемых параметров Таже истормя при оригенальном коде! что и в первом примере |
а вы запустите запрос в самом Access, он выполниться?
I Have Nine Lives You Have One Only
THINK!
Форум программистов Vingrad
| Модераторы: gambit |
Поиск: |
![]() ![]()
|
|
Опции темы |
| b3ndr |
|
||
|
Новичок Профиль Репутация: нет
|
База MS Access. Есть код.
Почему могут возникать эти ошибки? |
||
|
|||
| emmanuil |
|
||
|
Опытный Профиль Репутация: 1
|
|
||
|
|||
| corpse56 |
|
||
|
Новичок Профиль Репутация: нет
|
та же самая проблема. причем идентичный код с компонентами для sql работает. а для Access не работает. emmanuil, Ваше решение не помогло… |
||
|
|||
| emmanuil |
|
||
|
Опытный Профиль Репутация: 1
|
corpse56, покажите полный код. |
||
|
|||
| corpse56 |
|
||
|
Новичок Профиль Репутация: нет
|
Разобрался! в запросах OLE имена таблиц ОБЯЗАТЕЛЬНО должны быть в квадратных скобках. OleDbCommandBuilder генерирует команды правильно, вот только квадратные скобки не ставит около имени таблицы.я написал свою UpdateCommand и все заработало.
успехов! |
||
|
|||
| Rififi |
|
||
|
Эксперт Профиль Репутация: нет
|
corpse56, |
||
|
|||
| corpse56 |
|
||
|
Новичок Профиль Репутация: нет
|
и вправду!! щас пробовал на таблице Penalty — сработало без скобок. а ведь User выбирал с учетом того чтобы именно попробовать на другой таблице. я тогда подумал вдруг в таблице что-то не так. и попал опять на зарезервированное слово. Добавлено через 12 минут и 46 секунд |
||
|
|||
| Rififi |
|
||
|
Эксперт Профиль Репутация: нет
|
corpse56, |
||
|
|||
| corpse56 |
|
||
|
Новичок Профиль Репутация: нет
|
спасибо. посмотрел. но в списке не оказалось слова Password… |
||
|
|||
![]() ![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс «транслит» если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
| 0 Пользователей: |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |


Сообщение было отмечено duh_si как решение































