Запрос на вставку выполняется успешно, но данные не вставляются в базу данных (C#)

public partial class Form1 : Form
{
    OleDbConnection connection = new OleDbConnection(check.Properties.Settings.Default.KitchenConnectionString);

    public Form1()
    {
        InitializeComponent();
    }

    private void btn_add_Click(object sender, EventArgs e)
    {
        OleDbDataAdapter items = new OleDbDataAdapter();
        connection.Open();

        OleDbCommand command = new OleDbCommand("insert into Sets(SetId, SetName,  SetPassword) values('"+txt_id.Text+ "','" + txt_setname.Text + "','" + txt_password.Text + "');", connection);
        command.CommandType = CommandType.Text;

        command.ExecuteReader();

        connection.Close();

        MessageBox.Show("Inserted!");
    }
}

Не могли бы вы показать используемую строку подключения?

Steve 13.12.2020 17:31

Кроме того, теперь удаленный ответ jps делает правильное замечание: используйте ExecuteReader только для запросов, которые возвращают данные. Используйте ExecuteNonQuery для запросов, которые не

Caius Jard 13.12.2020 17:44
command.ExecuteNonQuery();.
wazz 13.12.2020 17:55

@Steve OleDbConnection connection = new OleDbConnection(WindowsFormsApplication1.Properties.Settings‌​.Default.KitchenConn‌​ectionString);

Tayyab ali 14.12.2020 06:05

@CaiusJard Я также использую ExecuteNonQuery(), но данные не сохраняются постоянно.

Tayyab ali 14.12.2020 06:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
6
140
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Учитывая, что это Ole, я предполагаю, что это Access - база данных на основе файлов. Ваша вставка выполняется успешно, но вы не находите данные в БД, когда смотрите

Вы должны понимать, что обычно с ba probe t, который использует базу данных доступа, у вас будет несколько копий базы данных, но наиболее важные из них, вероятно, выглядят следующим образом:

C:\myprojects\windowsapp1\your.accdb 
C:\myprojects\windowsapp1\bin\debug\your.accdb 

Первый — это база данных, которую вы видите в обозревателе решений. Второй размещается рядом с исполняемым файлом отладки каждый раз, когда вы запускаете сборку или, возможно, каждый раз, когда вы нажимаете кнопку воспроизведения в VS. Второй, вероятно, является БД, в которую вставляется ваша программа.

Вы либо ищете не ту базу данных для своих данных, либо каждый раз, когда вы запускаете свою программу, процесс сборки стирает базу данных изменений, копируя пустую (первую) поверх нее.

Запустите свое приложение, вставьте свои данные, не выходите из приложения, выполните поиск по всей папке проекта для всех экземпляров вашего файла db. Посмотрите во всех них. Вы, вероятно, найдете свои данные

  • Щелкните правой кнопкой мыши файл базы данных в обозревателе решений, выберите свойства и измените действие «Копировать» на «Копировать, если новее».

Теперь процесс сборки удалит вашу базу данных в папке отладки только в том случае, если вы внесете изменения в исходную базу данных, например, добавите в нее таблицу и т. д.

Я ввожу данные, не выхожу из приложения и ищу эти данные в обоих файлах БД, но не могу найти введенные данные.

Tayyab ali 14.12.2020 06:22

Опубликуйте фактическое значение параметра строки подключения (меню проекта, свойства, настройки)

Caius Jard 14.12.2020 08:13

Хорошо, хорошо, я получил значение, и, пожалуйста, скажите мне, как изменить действие копирования. ❤️

Tayyab ali 14.12.2020 08:45

Я ставлю точку рядом с советом, который вам нужен, внизу моего ответа

Caius Jard 14.12.2020 08:51

Я сделал то же самое, но на панели свойств я нашел только значения «поставщик», «состояние», «тип», «версия», «строка подключения». Но не могу найти опцию «Копировать действие». Я использую VS 2015.

Tayyab ali 14.12.2020 09:08

Я хотел сказать, вы уверены, что щелкнули правой кнопкой мыши файл базы данных в обозревателе решений? Судя по названиям этих реквизитов, у вас, возможно, есть свойства подключения к базе данных в обозревателе серверов :) - настало время убедиться, что это обозреватель решений, и вы можете видеть все файлы кода проекта и файлы данных, такие как файл аккдб. Также обычно обозреватель решений находится справа, обозреватель серверов обычно слева.

Caius Jard 14.12.2020 21:06

На самом деле в первой попытке я пытался получить свойства базы данных, расположенной слева. После этого я открываю свойства базы данных в обозревателе решений, который находится справа. Моя проблема решена.

Tayyab ali 15.12.2020 05:29

Но теперь, когда я пытаюсь удалить данные, они не удаляются из базы данных. Я пытаюсь удалить данные из datagridview и базы данных одновременно.

Tayyab ali 15.12.2020 05:30

foreach (элемент DataGridViewRow в this.category_grid.SelectedRows) { имя строки = item.Cells[0].Value.ToString(); соединение.Открыть(); Команда OleDbCommand = new OleDbCommand("удалить из категории, где CatName = '" +name+ "'",connection); команда.ВыполнитьНеЗапрос(); category_grid.Rows.RemoveAt(item.Index); соединение.Закрыть(); }

Tayyab ali 15.12.2020 05:31

Если у вас есть «база данных с левой стороны», то вы на самом деле всего в паре щелчков мыши от того, чтобы сделать все это автоматически; Visual Studio напишет за вас код, который все это делает.

Caius Jard 15.12.2020 18:10

У меня есть база данных с левой стороны, и я выполнил действие копирования, чтобы «копировать, если новее», но теперь запрос на удаление не выполняет действие :(

Tayyab ali 16.12.2020 06:40

ExecuteNonQuery возвращает целое число. если он возвращает 1, 1 строка была удалена, и вы ищете не в той базе данных. Если он возвращает 0, ни одна строка не была удалена

Caius Jard 16.12.2020 10:19

Другие вопросы по теме