Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 31
.NET 4.x

Sql command

07.07.2021, 08:35. Показов 3130. Ответов 10
Метки sql (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь внести в бд некие значения, получаю ошибку:
C#
1
System.Data.OleDb.OleDbException: "Ошибка синтаксиса в инструкции INSERT INTO."
Код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 using (var connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/Users/user/Desktop/VetRegistration/VetClinic.mdb"))
            {
                connection.Open();
                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;
                System.Windows.Forms.Form Form3ClientName = System.Windows.Forms.Application.OpenForms["Form3"];
                string s1 = ((Form3)Form3ClientName).textBox1.Text;
                string s2 = comboBox1.DisplayMember;
                string s3 = dateTimePicker1.Value.ToString();
                
                command.CommandText = "insert into Registration(Owner, Doctor, Time) values('" + s1 + "', '" + s2 + "', '" + s3 + "')";
                label3.Text = command.CommandText;
                OleDbCommand comm = new OleDbCommand(command.CommandText, connection);
 
                command.ExecuteNonQuery();
            }
Хотя на другой форме все получается:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
using (var connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/Users/user/Desktop/VetRegistration/VetClinic.mdb"))
            {
                connection.Open();
                OleDbCommand command1 = new OleDbCommand();
                command1.Connection = connection;
                string s1 = textBox1.Text;
                string s2 = textBox2.Text;
                string s3 = textBox3.Text;
                command1.CommandText = "insert into Client(Owner, PetName, Type) values('" + s1 + "', '" + s2 + "', '" + s3 + "')";
                OleDbCommand comm = new OleDbCommand(command1.CommandText, connection);
                label4.Text = command1.CommandText;
                command1.ExecuteNonQuery();
            }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.07.2021, 08:35
Ответы с готовыми решениями:

При выполнении запроса UPDATE возникает ошибка ORA-00933: SQL command not properly ended для таблицы с составным ключом
Эй, ребята, я пытаюсь обновить свою таблицу следующей частью кода: private void button4_Click(object sender, EventArgs e) ...

Command.Parameters ошибка
Всем привет. Пытаюсь создать параметр для запроса к БД. Почему то не получается в комманд добавить параметр. Вылазит такая ошибка -...

Не создаётся Update Command
Добавляю новый источник данных - подключаюсь к "Файл базы данных Microsoft Access" В обозревателе решений кликаю на DataSet и вызываю его...

10
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
07.07.2021, 08:47
кaрнавал, это потому что на другой форме вы не вставляете дату.
вам надо формировать команду с параметрами, и в качестве даты передавать дату а не строку
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 31
07.07.2021, 08:52  [ТС]
Тип данных у Time длинный текст, такой же как у остальных.

Добавлено через 3 минуты
тип данных в таблице длинный текст, не время.
0
 Аватар для Andrey-MSK
3358 / 2244 / 388
Регистрация: 14.08.2018
Сообщений: 7,587
Записей в блоге: 4
07.07.2021, 08:55
кaрнавал, поставьте точку останова на запрос и проверьте в отладчике что находится в переменных. И лучше использовать параметры - https://metanit.com/sharp/adonetcore/2.8.php
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 31
07.07.2021, 08:58  [ТС]
Вот так выглядит запрос.
Просто вывел его в лейбл.
Может быть ругается на какой-нибудь знак пунктуации?("." или ":" или вообще пробел)
Миниатюры
Sql command  
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 31
07.07.2021, 09:10  [ТС]
Проверил в sqllite, запрос рабочий
0
 Аватар для Andrey-MSK
3358 / 2244 / 388
Регистрация: 14.08.2018
Сообщений: 7,587
Записей в блоге: 4
07.07.2021, 09:13
кaрнавал, у вас MS Access? Если да, то текст в запросах там обрамляется в двойные кавычки " ", а у вас одинарные ' '
И зачем два раза в одном методе объявляете объект OleDbCommand?
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 31
07.07.2021, 09:33  [ТС]
Два раза объявлять действительно не за чем.
Запрос в сам MS Access делал с двойными кавычками.
Как понимаю в коде должны быть одинарные кавычки, поэтому там они одинарные.
Буду проверять каждый элемент отдельно, спасибо.

Добавлено через 15 минут
Ответ:

Поменял название столбца Time на DAteofservice, запрос успешно встал.

Вывод:

Не использовать Time(??????????????7)
0
 Аватар для Andrey-MSK
3358 / 2244 / 388
Регистрация: 14.08.2018
Сообщений: 7,587
Записей в блоге: 4
07.07.2021, 09:38
Лучший ответ Сообщение было отмечено кaрнавал как решение

Решение

Цитата Сообщение от кaрнавал Посмотреть сообщение
в коде должны быть одинарные кавычки
Должно быть то, что принимает СУБД

Добавлено через 2 минуты
Цитата Сообщение от кaрнавал Посмотреть сообщение
Time
Это служебное слово. А их лучше не использовать в названиях полей, либо экранировать. Для MS Access и MS SQL Server экранирование делается так - [Time]

Добавлено через 2 минуты
Цитата Сообщение от кaрнавал Посмотреть сообщение
Как понимаю в коде должны быть одинарные кавычки, поэтому там они одинарные.
Еще раз повторю, используйте параметры, и не будете натыкаться на несоответствие типов данных.
1
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
07.07.2021, 11:57
"Серверонезависимый" код (кроме названий полей, совпадающих с зарезервированными именами сервера):
C#
1
2
3
4
5
6
7
                string sql = "insert into Registration(Owner, Doctor, [Time]) values(@o, @d, @t)"; // Для MS SQL/Access
                // string sql = "insert into Registration(`Owner`, `Doctor`, `Time`) values(@o, @d, @t)"; // Для MySQL
                OleDbCommand comm = new OleDbCommand(sql, connection);
                comm.Parameters.AddWithValue("@o", ((Form3)Form3ClientName).textBox1.Text);
                comm.Parameters.AddWithValue("@d", comboBox1.DisplayMember);
                comm.Parameters.AddWithValue("@t", dateTimePicker1.Value);
                command.ExecuteNonQuery();
0
 Аватар для Andrey-MSK
3358 / 2244 / 388
Регистрация: 14.08.2018
Сообщений: 7,587
Записей в блоге: 4
07.07.2021, 12:08
MsGuns, и не взлетит
OleDbCommand в параметрах принимает не его имя, а знак вопроса ?, и параметры объявляются в порядке следования знаков вопроса в запросе.
OleDbCommand.Parameters Свойство
Поставщик OLE DB .NET не поддерживает именованные параметры для передачи параметров в инструкцию SQL или хранимую процедуру, вызываемую, OleDbCommand когда CommandType имеет значение Text . В этом случае необходимо использовать заполнитель вопросительного знака (?). Пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void CreateMyOleDbCommand(OleDbConnection connection,
    string queryString, OleDbParameter[] parameters)
{
    OleDbCommand command = new OleDbCommand(queryString, connection);
    command.CommandText =
        "SELECT CustomerID, CompanyName FROM Customers WHERE Country = ? AND City = ?";
    command.Parameters.Add(parameters);
 
    for (int j=0; j<parameters.Length; j++)
    {
        command.Parameters.Add(parameters[j]) ;
    }
 
    string message = "";
    for (int i = 0; i < command.Parameters.Count; i++)
    {
        message += command.Parameters[i].ToString() + "\n";
    }
    Console.WriteLine(message);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.07.2021, 12:08
Помогаю со студенческими работами здесь

Несколько подключений к command
Можно ли как нибудь к одной command присвоить два connectiona OleDbConnection connect = new OleDbConnection(); ...

Command.Timeout не работает!
Ребята, что делать с этим багом: при вызове процедуры из БД пишу ... command.CommandTimeout = 0; command.CommandType =...

SqlLite, ошибка: No connection associated with this command
Здравствуйте, есть код. class Base { SQLiteConnection connection = null; public Base() { } public...

OleDbConnection command = new OleDbCommand() ошибка
OleDbConnection command = new OleDbCommand() ошибка пишет неявное приобразования using System; using System.Collections.Generic; ...

SQLite: Insufficient parameters supplied to the command
Помогите разобраться пожалуста. namespace ExsecuteRider { class Program { static void Main( string args ) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru