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!");
}
}
Пожалуйста, прочитайте Bobby-tables.com - вам нужно повысить уровень своих навыков SQL, и никогда больше не писать SQL, как вы делаете здесь; мы уволили разработчиков за это, потому что это очень риск взлома
Кроме того, теперь удаленный ответ jps делает правильное замечание: используйте ExecuteReader только для запросов, которые возвращают данные. Используйте ExecuteNonQuery для запросов, которые не
command.ExecuteNonQuery();
.
@Steve OleDbConnection connection = new OleDbConnection(WindowsFormsApplication1.Properties.Settings.Default.KitchenConnectionString);
@CaiusJard Я также использую ExecuteNonQuery(), но данные не сохраняются постоянно.
Учитывая, что это Ole, я предполагаю, что это Access - база данных на основе файлов. Ваша вставка выполняется успешно, но вы не находите данные в БД, когда смотрите
Вы должны понимать, что обычно с ba probe t, который использует базу данных доступа, у вас будет несколько копий базы данных, но наиболее важные из них, вероятно, выглядят следующим образом:
C:\myprojects\windowsapp1\your.accdb
C:\myprojects\windowsapp1\bin\debug\your.accdb
Первый — это база данных, которую вы видите в обозревателе решений. Второй размещается рядом с исполняемым файлом отладки каждый раз, когда вы запускаете сборку или, возможно, каждый раз, когда вы нажимаете кнопку воспроизведения в VS. Второй, вероятно, является БД, в которую вставляется ваша программа.
Вы либо ищете не ту базу данных для своих данных, либо каждый раз, когда вы запускаете свою программу, процесс сборки стирает базу данных изменений, копируя пустую (первую) поверх нее.
Запустите свое приложение, вставьте свои данные, не выходите из приложения, выполните поиск по всей папке проекта для всех экземпляров вашего файла db. Посмотрите во всех них. Вы, вероятно, найдете свои данные
Теперь процесс сборки удалит вашу базу данных в папке отладки только в том случае, если вы внесете изменения в исходную базу данных, например, добавите в нее таблицу и т. д.
Я ввожу данные, не выхожу из приложения и ищу эти данные в обоих файлах БД, но не могу найти введенные данные.
Опубликуйте фактическое значение параметра строки подключения (меню проекта, свойства, настройки)
Хорошо, хорошо, я получил значение, и, пожалуйста, скажите мне, как изменить действие копирования. ❤️
Я ставлю точку рядом с советом, который вам нужен, внизу моего ответа
Я сделал то же самое, но на панели свойств я нашел только значения «поставщик», «состояние», «тип», «версия», «строка подключения». Но не могу найти опцию «Копировать действие». Я использую VS 2015.
Я хотел сказать, вы уверены, что щелкнули правой кнопкой мыши файл базы данных в обозревателе решений? Судя по названиям этих реквизитов, у вас, возможно, есть свойства подключения к базе данных в обозревателе серверов :) - настало время убедиться, что это обозреватель решений, и вы можете видеть все файлы кода проекта и файлы данных, такие как файл аккдб. Также обычно обозреватель решений находится справа, обозреватель серверов обычно слева.
На самом деле в первой попытке я пытался получить свойства базы данных, расположенной слева. После этого я открываю свойства базы данных в обозревателе решений, который находится справа. Моя проблема решена.
Но теперь, когда я пытаюсь удалить данные, они не удаляются из базы данных. Я пытаюсь удалить данные из datagridview и базы данных одновременно.
foreach (элемент DataGridViewRow в this.category_grid.SelectedRows) { имя строки = item.Cells[0].Value.ToString(); соединение.Открыть(); Команда OleDbCommand = new OleDbCommand("удалить из категории, где CatName = '" +name+ "'",connection); команда.ВыполнитьНеЗапрос(); category_grid.Rows.RemoveAt(item.Index); соединение.Закрыть(); }
Если у вас есть «база данных с левой стороны», то вы на самом деле всего в паре щелчков мыши от того, чтобы сделать все это автоматически; Visual Studio напишет за вас код, который все это делает.
У меня есть база данных с левой стороны, и я выполнил действие копирования, чтобы «копировать, если новее», но теперь запрос на удаление не выполняет действие :(
ExecuteNonQuery возвращает целое число. если он возвращает 1, 1 строка была удалена, и вы ищете не в той базе данных. Если он возвращает 0, ни одна строка не была удалена
Не могли бы вы показать используемую строку подключения?