Здравствуйте! Сегодня: Чт, 22 Окт 2020, Ваш IP: 3.210.201.170 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Базы данных
+ Создать новую тему Страница: 1
Тема: Не записывает инфу в бд access c# · +  +  дата добавления: 17.11.2014 / 21:15
Автор темы:
Igorian
Igorian
тем: 1 / ответов: 0 / благодарностей: 0 / репутация: 0
ответов: 0
создал(а) тем: 1


Здравствуйте.

Не работает следующий код:

SettingsWindow settingsWindow = new SettingsWindow();
            //settingsWindow.Show();

            OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data   Source=D:\Work\17.09.2013\FFF\FFQQ\FFQQ\FFQQ\DB.accdb");

            try
            {
                connection.Open();
                //MessageBox.Show("Подключено!!!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка подключения" + ex);
            }

            OleDbCommand cmd = new OleDbCommand("Update FirstTable"+" Set [first] = @first where ID = @ID", connection);
            
            OleDbParameter param;

            param = new OleDbParameter();
            param.ParameterName = "@ID";
            param.Value = DBInfoMas[0, 0];
            param.OleDbType = OleDbType.Double;
            cmd.Parameters.Add(param);

            param = new OleDbParameter();
            param.ParameterName = "@first";
            param.Value = DBInfoMas[0, 1];
            param.OleDbType = OleDbType.Double;
            cmd.Parameters.Add(param);

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch(OleDbException ex)
            {
                MessageBox.Show("Ошибка: " + ex);
                Console.WriteLine("Ошибка, при выполнении запроса на изменение записи(ей)");

            }
            
            connection.Close();

Ошибок никаких не выдает, но и ничего не записывает.
В строке -

OleDbCommand cmd = new OleDbCommand("Update FirstTable"+" Set [first] = @first where ID = @ID", connection);
Вначале писал
Set first = @first where ID = @ID
first без скобок. Выдает ошибку - Syntax error in UPDATE statement.
Хотя до этого писал точно также без квадратных скобок для sql базы и все нормально работало. Сейчас поставил скобки, ошибок нет, но и ничего не происходит.
Технологии: C#, Microsoft Access
 
Ответ # 1 # · +  +  дата добавления: 17.11.2014 / 22:17
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Квадратные скобки в SQL - это экранирование. А first - ключевое слово и если оно используется в качестве имени таблицы или поля, то нужно его экранировать (писать в квадратных скобках).

Код вроде правильный, почти. Если не изменяет память, в Access важно соблюдать порядок переменных, передаваемых в запрос. Т.е. если параметр @first в запросе первый, то нужно сначала добавлять его в cmd, и только потом @id.

Еще проблема может быть в отсутсвии прав на запись в файл базы. Например, если файл базы открыт в другой программе. Хотя в таких случаях должно возникать исключение.

Если ничего не помогает, то может у id значение неправильное? Если id не существует, то ошибок не будет и запрос просто выполнится в холостую.
 
Страница: 1 + Создать новую тему