I was working in C# form application with an MS-Access mdb
database. I have a database in which I have a table Customers
with two columns CustomerId
And Balance
. Both columns are of integer
datatype.
Error I was getting is
System.Data.OleDb.OleDbException: Syntax error in UPDATE statement.
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
at xml_and_db_test.Form1.button1_Click(Object sender, EventArgs e) in G:\my Documents\Visual Studio 2008\Projects\xml_and_db_test\xml_and_db_test\Form1.cs:line 45
Codes I have tried till now are
try
{
OleDbConnection con = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\database_for_kissan_Pashu_AhaR_Bills.mdb");
int balance = Convert.ToInt32(textBox2.Text);
int id = Convert.ToInt32(textBox1.Text);
// int recordnumb = int.Parse(recordTextBox.Text);
// OleDbConnection oleDbConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Checkout-1\\Documents\\contact.accdb");
OleDbCommand update = new OleDbCommand("UPDATE Customers SET Balance = '" + balance + "', WHERE id = " + id + " ", con);
con.Open();
update.ExecuteNonQuery();
con.Close();
// string queryText = "UPDATE Customers SET Balance = ?, where CustomerId = ?;";
//string queryText = " 'UPDATE Customers SET Balance =' " + balance+ " ' WHERE CustomerId= ' " + id + " ' " ;
//OleDbCommand cmd = new OleDbCommand(queryText, con);
//cmd.CommandType = CommandType.Text;
//cmd.Parameters.AddWithValue("@balance", Convert.ToInt32(textBox2.Text));
//cmd.Parameters.AddWithValue("@ID", Convert.ToInt32(textBox1.Text));
//cmd.Parameters.Add("Balance", OleDbType.Integer).Value = Convert.ToInt32(textBox2.Text);
//cmd.Parameters.Add("CustomerId", OleDbType.Integer).Value = Convert.ToInt32(textBox1.Text);
//con.Open(); // open the connection
////OleDbDataReader dr = cmd.ExecuteNonQuery();
//int yy = cmd.ExecuteNonQuery();
//con.Close();
}
catch (Exception ex)
{
string c = ex.ToString();
MessageBox.Show(c);
}
//try
//{
// OleDbConnection con = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = G:\\my Documents\\Visual Studio 2008\\Projects\\xml_and_db_test\\xml_and_db_test\\bin\\Debug\\database_for_kissan_Pashu_AhaR_Bills.mdb");
// string queryText = "UPDATE Customers SET Balance = ?, where CustomerId = ?;";
// OleDbCommand cmd = new OleDbCommand(queryText, con);
// cmd.CommandType = CommandType.Text;
// //cmd.Parameters.AddWithValue("@balance", Convert.ToInt32(textBox2.Text));
// //cmd.Parameters.AddWithValue("@ID", Convert.ToInt32(textBox1.Text));
// cmd.Parameters.Add("Balance", OleDbType.Integer).Value = Convert.ToInt32(textBox2.Text);
// cmd.Parameters.Add("CustomerId", OleDbType.Integer).Value = Convert.ToInt32(textBox1.Text);
// con.Open(); // open the connection
// //OleDbDataReader dr = cmd.ExecuteNonQuery();
// int yy = cmd.ExecuteNonQuery();
// con.Close();
//}
//catch (Exception ex)
//{
// string c = ex.ToString();
// MessageBox.Show(c);
//}
//string connetionString = null;
//OleDbConnection connection;
//OleDbDataAdapter oledbAdapter = new OleDbDataAdapter();
//string sql = null;
//connetionString = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = G:\\my Documents\\Visual Studio 2008\\Projects\\xml_and_db_test\\xml_and_db_test\\bin\\Debug\\database_for_kissan_Pashu_AhaR_Bills.mdb;";
//connection = new OleDbConnection(connetionString);
//sql = "update Customers set Balance = '1807' where CustomerId = '1'";
//try
//{
// connection.Open();
// oledbAdapter.UpdateCommand = connection.CreateCommand();
// oledbAdapter.UpdateCommand.CommandText = sql;
// oledbAdapter.UpdateCommand.ExecuteNonQuery();
// MessageBox.Show("Row(s) Updated !! ");
// connection.Close();
//}
//catch (Exception ex)
//{
// MessageBox.Show(ex.ToString());
//}
some codes are In comments and some are with every method i’m getting the same error.
- 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 been working on this issue for ages! I have an MSAccess 2007 db and I am using Visual Studio 2010 and Visual Basic to write an application that reads and writes from the database. The read works just fine but when I try and write an updated password back into the database, it fails. Initially I had just a plain ‘Syntax Error’ which wasn’t that helpful, but with a bit of research I noted that access databases seem to have an issue with columns called password. I renamed that and tried again, now I get this error when the
da.Update(ds,»All_Users»)
command is executed.
The full error message from VS is :
Syntax error (missing operator) in query expression '((ID = ?) AND ((? = 1 AND Forename IS NULL) OR (Forename = ?)) AND ((? = 1 AND Surname IS NULL) OR (Surname = ?)) AND ((? = 1 AND User_Level IS NULL) OR (User_Level = ?)) AND ((? = 1 AND Last Logon IS NULL) OR (Last Logon = ?)) AND ((? = 1 AND Allow IS NU'.
My code is as follows:
Private Sub btnSave_Click(snder as System.Object, e As System.EventArgs) Handles btnSave.Click
Dim Con As New OleDb.OleDbConnection
Dim ConString As String
Dim ds As New DataSet
Dim da As OleDb.OleDbDataAdapter
Dim Sql As String = "SELECT * FROM tblUsers"
'
ConString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
Application.StartupPath & "\Data\Users.accdb;Jet OLEDB:Database Password=---------;"
Con.ConnectionString = ConString
Con.Open()
da = New OleDb.OleDbDataAdapter(Sql, Con)
da.Fill(ds, "All_Users")
'Now loop through the records until you find the one for this user
For i = 0 To ds.Tables("All_Users").Rows.Count - 1
If ds.Tables("All_Users").Rows(i).Item(0).ToString = CurrentUser.ID Then
ds.Tables("All_Users").Rows(i).Item(6) = txtConfirmPassword.Text
End If
Next
CurrentUser.Password = txtConfirmPassword.Text
'
Dim cb As New OleDb.OleDbCommandBuilder(da)
da.Update(ds, "All_Users")
'
Con.Close()
MessageBox.Show("Your password has been sucessfully updated.", "Success", _
MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
Me.Close()
Перейти к контенту
duh_si 569 / 169 / 22 Регистрация: 18.10.2012 Сообщений: 903 |
||||
1 |
||||
11.07.2014, 10:50. Показов 1383. Ответов 14 Метки нет (Все метки)
День добрый.
Пишет: Ошибка синтаксиса в инструкции UPDATE Подскажите пожалуйста в чем причина… 0 |
26788 / 14467 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
|
11.07.2014, 11:24 |
2 |
Самая вероятная причина это пустое (NULL) значение в одной из числовых переменных. Тогда собранная строка имеет знак равенства за которым следует запятая. Конечно, это ошибка. 1 |
569 / 169 / 22 Регистрация: 18.10.2012 Сообщений: 903 |
|
11.07.2014, 11:29 [ТС] |
3 |
mobile, тоже очень частый — какие-то переменные имеют текстовый тип и должны окаймляться апострофами. с этим уже столкнулся, это поправил все mobile, причина это пустое (NULL) вы скорее всего правы в этом, подскажите как это можно обработать ? 0 |
mobile 26788 / 14467 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||
11.07.2014, 11:32 |
4 |
|||
Решение
как это можно обработать ? Пример для поля Количество
Такая запись, при пустом значении запишет NULL в собранное SQL-выражение. 1 |
duh_si 569 / 169 / 22 Регистрация: 18.10.2012 Сообщений: 903 |
||||
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 Модератор 11465 / 4713 / 759 Регистрация: 07.08.2010 Сообщений: 13,686 Записей в блоге: 4 |
||||
11.07.2014, 12:11 |
7 |
|||
а должен выглядеть примерно так
хотя будет ерунда, если данного номера нет или их несколько 2 |
8791 / 5669 / 579 Регистрация: 27.03.2013 Сообщений: 19,139 |
|
11.07.2014, 14:40 |
8 |
Возможно вопрос по теме. Миниатюры
0 |
8791 / 5669 / 579 Регистрация: 27.03.2013 Сообщений: 19,139 |
|
11.07.2014, 15:13 |
9 |
На все другие ремы навожу, такого нет, а у вас не пропадает. Добавлено через 28 минут 0 |
duh_si 569 / 169 / 22 Регистрация: 18.10.2012 Сообщений: 903 |
||||
15.07.2014, 12:29 [ТС] |
10 |
|||
подскажите как можно обработать переменные в которых дата,
ругается на запрос update Несоответствие типов данных в выражении условия отбора. 0 |
shanemac51 Модератор 11465 / 4713 / 759 Регистрация: 07.08.2010 Сообщений: 13,686 Записей в блоге: 4 |
||||
15.07.2014, 14:50 |
11 |
|||
но сохранить запись нужно с этими пустыми полями сие не заметила, но и без этого орехов много
0 |
569 / 169 / 22 Регистрация: 18.10.2012 Сообщений: 903 |
|
15.07.2014, 15:23 [ТС] |
12 |
shanemac51, использую ваш код, Миниатюры
0 |
Модератор 11465 / 4713 / 759 Регистрация: 07.08.2010 Сообщений: 13,686 Записей в блоге: 4 |
|
15.07.2014, 15:38 |
13 |
у меня вашей базы нет —проверить не смогла (а2007) может дело в том, что у вас нет какой-то даты 0 |
569 / 169 / 22 Регистрация: 18.10.2012 Сообщений: 903 |
|
15.07.2014, 15:57 [ТС] |
14 |
shanemac51, может дело в том, что у вас нет какой-то даты в том то и дело, поля с датами остаются пустыми ( эти поля пользователю не обязательно сразу нужно заполнять, как нужно будет он заполнит ) , соответственно и в переменных пусто, а когда UPDATE делаю, код ругается что в переменных нет ничего, а мне нужно чтобы он не обращал на это внимание, просто тупо перезаписывал пустоту 0 |
shanemac51 Модератор 11465 / 4713 / 759 Регистрация: 07.08.2010 Сообщений: 13,686 Записей в блоге: 4 |
||||
15.07.2014, 16:42 |
15 |
|||
проверка на пустые поля
1 |
I was working in C# form application with an MS-Access mdb
database. I have a database in which I have a table Customers
with two columns CustomerId
And Balance
. Both columns are of integer
datatype.
Error I was getting is
System.Data.OleDb.OleDbException: Syntax error in UPDATE statement.
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
at xml_and_db_test.Form1.button1_Click(Object sender, EventArgs e) in G:my DocumentsVisual Studio 2008Projectsxml_and_db_testxml_and_db_testForm1.cs:line 45
Codes I have tried till now are
try
{
OleDbConnection con = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\database_for_kissan_Pashu_AhaR_Bills.mdb");
int balance = Convert.ToInt32(textBox2.Text);
int id = Convert.ToInt32(textBox1.Text);
// int recordnumb = int.Parse(recordTextBox.Text);
// OleDbConnection oleDbConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Checkout-1\Documents\contact.accdb");
OleDbCommand update = new OleDbCommand("UPDATE Customers SET Balance = '" + balance + "', WHERE id = " + id + " ", con);
con.Open();
update.ExecuteNonQuery();
con.Close();
// string queryText = "UPDATE Customers SET Balance = ?, where CustomerId = ?;";
//string queryText = " 'UPDATE Customers SET Balance =' " + balance+ " ' WHERE CustomerId= ' " + id + " ' " ;
//OleDbCommand cmd = new OleDbCommand(queryText, con);
//cmd.CommandType = CommandType.Text;
//cmd.Parameters.AddWithValue("@balance", Convert.ToInt32(textBox2.Text));
//cmd.Parameters.AddWithValue("@ID", Convert.ToInt32(textBox1.Text));
//cmd.Parameters.Add("Balance", OleDbType.Integer).Value = Convert.ToInt32(textBox2.Text);
//cmd.Parameters.Add("CustomerId", OleDbType.Integer).Value = Convert.ToInt32(textBox1.Text);
//con.Open(); // open the connection
////OleDbDataReader dr = cmd.ExecuteNonQuery();
//int yy = cmd.ExecuteNonQuery();
//con.Close();
}
catch (Exception ex)
{
string c = ex.ToString();
MessageBox.Show(c);
}
//try
//{
// OleDbConnection con = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = G:\my Documents\Visual Studio 2008\Projects\xml_and_db_test\xml_and_db_test\bin\Debug\database_for_kissan_Pashu_AhaR_Bills.mdb");
// string queryText = "UPDATE Customers SET Balance = ?, where CustomerId = ?;";
// OleDbCommand cmd = new OleDbCommand(queryText, con);
// cmd.CommandType = CommandType.Text;
// //cmd.Parameters.AddWithValue("@balance", Convert.ToInt32(textBox2.Text));
// //cmd.Parameters.AddWithValue("@ID", Convert.ToInt32(textBox1.Text));
// cmd.Parameters.Add("Balance", OleDbType.Integer).Value = Convert.ToInt32(textBox2.Text);
// cmd.Parameters.Add("CustomerId", OleDbType.Integer).Value = Convert.ToInt32(textBox1.Text);
// con.Open(); // open the connection
// //OleDbDataReader dr = cmd.ExecuteNonQuery();
// int yy = cmd.ExecuteNonQuery();
// con.Close();
//}
//catch (Exception ex)
//{
// string c = ex.ToString();
// MessageBox.Show(c);
//}
//string connetionString = null;
//OleDbConnection connection;
//OleDbDataAdapter oledbAdapter = new OleDbDataAdapter();
//string sql = null;
//connetionString = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = G:\my Documents\Visual Studio 2008\Projects\xml_and_db_test\xml_and_db_test\bin\Debug\database_for_kissan_Pashu_AhaR_Bills.mdb;";
//connection = new OleDbConnection(connetionString);
//sql = "update Customers set Balance = '1807' where CustomerId = '1'";
//try
//{
// connection.Open();
// oledbAdapter.UpdateCommand = connection.CreateCommand();
// oledbAdapter.UpdateCommand.CommandText = sql;
// oledbAdapter.UpdateCommand.ExecuteNonQuery();
// MessageBox.Show("Row(s) Updated !! ");
// connection.Close();
//}
//catch (Exception ex)
//{
// MessageBox.Show(ex.ToString());
//}
some codes are In comments and some are with every method i’m getting the same error.
I am displaying a data in datagridview and I am trying to update the database from datagridview. So I am using OleDbCommandBuilder to generate the update command. I get «Syntax error in update statement» when clicking on update button.
Here is my code:
private void listBox9_SelectedValueChanged(object sender, EventArgs e)
{
AppDomain.CurrentDomain.SetData("DataDirectory", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|\Trip Sheet Management System\WABCO.mdb");
sql = "SELECT ID,[TRIP COST] FROM TMSDETAILS";
dataAdapter = new OleDbDataAdapter(sql, connection);
dataTable = new DataTable();
bindingSource = new BindingSource();
connection.Open();
dataAdapter.Fill(dataTable);
bindingSource.DataSource = dataTable;
dataGridView1.DataSource = bindingSource;
connection.Close();
}
private void button8_Click(object sender, EventArgs e)
{
commandBuilder = new OleDbCommandBuilder(dataAdapter);
try
{
dataAdapter.Update(dataTable);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
When I click on update button, I get error in MessageBox saying «Syntax error in update statement»
Field 1: ID — Autonumber, primary key
Field 2: TRIP COST — Number
asked Feb 3, 2015 at 15:42
4
Guys I found the answer by myself.
The error occurred because the field name contains a space i.e TRIP COST.
just add the two line next to command builder statement.
commandBuilder.QuotePrefix = «[«;
commandBuilder.QuoteSuffix = «]»;
Here is the edited code.
private void listBox9_SelectedValueChanged(object sender, EventArgs e)
{
AppDomain.CurrentDomain.SetData("DataDirectory", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|\Trip Sheet Management System\WABCO.mdb");
sql = "SELECT ID,[TRIP COST] FROM TMSDETAILS";
dataAdapter = new OleDbDataAdapter(sql, connection);
dataTable = new DataTable();
bindingSource = new BindingSource();
connection.Open();
dataAdapter.Fill(dataTable);
bindingSource.DataSource = dataTable;
dataGridView1.DataSource = bindingSource;
connection.Close();
}
private void button8_Click(object sender, EventArgs e)
{
commandBuilder = new OleDbCommandBuilder(dataAdapter);
commandBuilder.QuotePrefix = "[";
commandBuilder.QuoteSuffix = "]";
try
{
dataAdapter.Update(dataTable);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Hope it helps others.
answered Feb 4, 2015 at 3:44
Raize AhamedRaize Ahamed
2852 gold badges4 silver badges20 bronze badges
1
- Remove From My Forums
-
Вопрос
-
Элементарный запрос:
«UPDATE Client SET BalancePersonalAccount = 20,3 WHERE ID = 531707020»
Не обновляется, т.к 20,3 (запятая). Ставлю точку (20.3) — все работает.
Как от этого избавиться?
Aссess стоит 2016, но база — Aссess 2000
Язык в Windows — русский.
Разделитель целой и дробной части — запятая.
Ответы
-
Никаких грабель, ведь это не строка в каком то локализованном формате, а float/double (или другой нужный тип). Если это переменная то присвойте ее значение без преобразования в строку.
Использование параметров разом излечивает от проблем глобализации/локализации (это то что у вас), а заодно избавляет от атак класса SQL Injection. Так же повышается производительность, ведь нет необходимости преобразовывать числа
в строки и потом обратно в числа (на удивление дорогая операция). Так же при большом числе операций можно использовать один подготовленный запрос меняя каждый раз лишь значения параметров, это может поднять скорость на порядок.Передача значений в запросах в общем случае является грубой ошибкой с серьезными проблемами и опасными последствиями.
Что до SQL то он возьмет формат чисел который установлен на сервере (а не на клиенте). Если настройки на клиенте и сервере разные (как скорее всего у вас) то начинаются проблемы с форматами если передавать их в строках запросов.
This posting is provided «AS IS» with no warranties, and confers no rights.
-
Предложено в качестве ответа
4 января 2017 г. 8:51
-
Помечено в качестве ответа
Maksim MarinovMicrosoft contingent staff, Moderator
9 января 2017 г. 7:58
-
Предложено в качестве ответа
-
Не хотел в этой простенькой программе замораживаться с параметрами, но видно придется.
Я, по глупости своей, забыл, что в параметр передается значение (не так часто с БД работаю). В любом случае — спасибо.
Реализую — отпишусь. Может еще кому поможет.
public Single Update_Object_BalancePersonalAccount(Int32 objectID) {
Single s = Calculate_ObjectBalancePersonalAccount(objectID);
string sql = «UPDATE [Object] SET [Object].BalancePersonalAccount = @bpa WHERE [Object].ID = @id»;OleDbCommand cmd = new OleDbCommand(sql, _connection);
cmd.Parameters.AddWithValue(«@bpa», SqlDbType.Money);
cmd.Parameters[«@bpa»].Value = s;cmd.Parameters.AddWithValue(«@id», SqlDbType.Int);
cmd.Parameters[«@id»].Value = objectID;try {
_connection.Open();
cmd.ExecuteScalar();
} catch(Exception ex) {
Console.WriteLine(ex.Message);
} finally { _connection.Close(); }
return s;
}-
Изменено
dav_tag
4 января 2017 г. 11:20 -
Помечено в качестве ответа
Maksim MarinovMicrosoft contingent staff, Moderator
9 января 2017 г. 7:58
-
Изменено
#c# #visual-studio-2010 #syntax-error #ms-access-2010
Вопрос:
Я столкнулся с синтаксической ошибкой в инструкции UPDATE при обновлении пароля в базе данных Access на C#:
protected void Button1_Click(object sender, EventArgs e)
{
OleDbConnection con = new OleDbConnection();
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
Server.MapPath("~/Database/registration.accdb");
con.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText =
"UPDATE into userdata(password)values('" TextBox1.Text "') where id=@id";
cmd.ExecuteNonQuery();
con.Close();
Response.Write("alert('Password Reset Successfully done');");
}
Комментарии:
1. Итак, в чем именно заключается ваш вопрос?
2. Где синтаксическая ошибка?
3. Вам нужно узнать о синтаксисе инструкции UPDATE SQL…
UPDATE INTO
это неправильный синтаксис4. И хранение пароля в базе данных-это полное «нет-нет». НИКОГДА, НИКОГДА, НИКОГДА НЕ храните незашифрованный пароль (даже не зашифрованный).
5. пожалуйста, используйте параметризованные запросы — построение SQL-запросов путем объединения и т. Д.-Это путь к катастрофе. это не только источник многих трудных для отладки синтаксических ошибок, но и широкие открытые ворота для атак с использованием SQL-инъекций .
Ответ №1:
Это потому, что вы SQL Query
неверны, вы не так обновляете данные в своей базе данных. Это должно быть так:
query = "Update [tableName] SET [ColumnName] = 'Values', [ColumnName1] = 'Values2',...";
Вы должны изучить, по крайней мере, основы синтаксиса SQL, более подробная информация здесь
А также вам не следует объединять свой запрос, так как он станет уязвимым для SQL Injection attack
, вы должны, по крайней мере, использовать Parameterized Query
OleDbConnection con = new OleDbConnection();
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
Server.MapPath("~/Database/registration.accdb");
con.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText =
"UPDATE yourTableName SET [yourColumnName] = @YourFirstValue, [secondColumnName] = @YourSecondValue WHERE [columnKey] = @ID"
cmd.Parameters.AddWithValue("@YourFirstValues", textbox1.Text);
cmd.Parameters.AddWithValue("@YourSecondValue ", textbox2.Text);
cmd.Parameters.AddWithValue("@ID", textbox3.Text);
cmd.ExecuteNonQuery();
con.Close();
Response.Write("alert('Password Reset Successfully done');");
Комментарии:
1. @user9938 Текстовое поле не может иметь значение
null
. И значение empty будет работать нормально, несмотря на ваше утверждение.
Ответ №2:
вы должны исправить свой запрос
"UPDATE userdata SET password=@password where id=@id";
и добавьте новые строки перед cmd.Запрос на выполнение()
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@password", TextBox1.Text);
Комментарии:
1. Вероятно, это сработает, но: НИКОГДА не храните пароли в базе данных. Вместо этого используйте соленые хэши.
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!