Как обновить значение ячейки в таблице дБ, используя SQL Server CE и C # (Visual Studio 2010)

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

В частности, я хочу обновить камеру, показывая количество фильма на складе после того, как кто-то снимает фильм.

До сих пор я пытался это сделать:

string updateDVDs = "UPDATE Products SET dvd_quantity = " + product.Quantity + " WHERE title = '"+ product.Name +"';"; cmdUpdateDVDs = new SqlCeCommand(updateDVDs, dBConnection); dBConnection.Open(); cmdUpdateDVDs.ExecuteNonQuery(); dBConnection.Close(); 

Я не получаю никаких ошибок, но ячейка не обновляется в таблице. Любая помощь будет принята с благодарностью, пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

UPDATE: Хорошо, у меня есть интересные разработки, я обновил код:

 string updateDVDs = "UPDATE Products SET dvd_quantity = " + product.Quantity + " WHERE title = '" + product.Name + "'"; dBConnection = new SqlCeConnection(connectionString); cmdUpdateDVDs = new SqlCeCommand(updateDVDs, dBConnection); cmdUpdateDVDs.Connection.Open(); int rows = cmdUpdateDVDs.ExecuteNonQuery(); dBConnection.Close(); 

Из того, что я могу сказать, глядя на MSDN, оба метода действительны, но этот второй, похоже, работает. Теперь странный бит, я снимаю фильм «Die Hard», все идет плавно, я получаю следующие результаты:

Обновлена ​​база данных

Все хорошо, С этого момента нет пути, поэтому я покинул приложение и начал снова. Я иду в аренду «Die Hard» второй раз, чтобы подтвердить, и, успех! новое чтение на DVD-диске равно 0, как ожидалось: Количество DVD успешно обновлено!

Но, когда я открываю таблицу Product в Visual Studio, исходные значения все еще существуют: В Visual Studio таблица не обновилась

Не только это, но когда я запускаю приложение снова после открытия таблицы в Visual Studio, количество DVD возвращается к исходным значениям, а обновленные значения исчезают.

Я что-то пропустил здесь? Я пробовал обновлять таблицу, это не имеет никакого значения. Пока я не открываю таблицу в Visual Studio, приложение работает так, как ожидалось, независимо от того, сколько раз я его запускаю, значения обновляются как ожидается, пока я не открою таблицу.

Вы должны точно сказать, какую строку подключения вы используете, говоря такие вещи, как «Я обновил соединение, чтобы указать на базу данных в папке bin», не помогает. Используете ли вы строку соединения, такую ​​как c:\Users\Me\Visual Studio 2010\Projects\MyProject\bin\debug\HKRMoviesDB.sdf ? Это неверно, это жестко закодировано в вашей тестовой папке VS2010 на вашем компьютере и не будет работать для кого-либо еще, будет работать только при запуске из отладчика и не будет работать при развертывании вашего приложения.

ADO.NET ищет вертикальные столбцы в строках соединения и расширяет закрытую строку, используя свойство AppDomain. Например, если вы используете Data Source=|DataDirectory|\HKRMoviesDB.sdf из отладчика VS, DataDirectory расширяется в папку bin вашего проекта, где VS копирует DLL отладки. Если вы развертываете свое приложение с помощью установщика MSI, DataDirectory расширяется до выбранной вами папки установки приложения, выбранной пользователем. Дальнейшее объяснение заключается в этом ответе .

Имейте в DataDirectory что DataDirectory не может быть каталогом, доступным для записи пользователями; это хороший каталог для данных только для чтения, но если вы хотите, чтобы пользователи записывали в файл, вы должны скопировать его в Environment.SpecialFolder.ApplicationData или где-нибудь в вашем приложении, как объяснено в этом ответе .

Есть еще одна вещь, о которой нужно помнить. Когда вы отлаживаете, вы обычно хотите скопировать исходные исходные данные в папку отладки, протестировать ее, а затем отбросить тестовые данные, потому что вы, как правило, не хотите, чтобы ваши тестовые данные включались в окончательное развертывание. Это то, что делает свойство «Копировать в выходной каталог» в вашем проекте. Если он настроен на «копировать, если новый», что, вероятно, должно быть, то любые изменения, внесенные вами в тестовые данные, являются временными; в следующий раз, когда вы обновите исходные исходные данные в своем проекте, ваши тестовые данные будут отброшены. Помните, что каталог развертывания вашего приложения обычно недоступен для записи пользователями, поэтому вы не должны писать данные пользователя в DataDirectory .

Один сокурсник указал мне на это:

«Из того, что я понимаю, firebase database, которую обновляет ваш код, если вы не закодировали путь к базе данных, – это файл в папке / bin / debug /. Файл, который вы просматриваете в Visual Studio, является тем, который указан в корне вашего проекта».

Я обновил соединение, чтобы указать на базу данных в папке bin.

  • Как подключиться к базе данных MySQL?
  • Массовая копия DataTable в MySQL (аналогично System.Data.SqlClient.SqlBulkCopy)
  • Как вывести результаты запроса HiveQL в CSV?
  • Как проверить, существует ли таблица в базе данных Android SQLite?
  • Разница между ключом раздела, составным ключом и ключом кластеризации в Cassandra?
  • Зачем мне нужна транзакция в Hibernate для работы только для чтения?
  • Весенняя партия Работа, считанная из нескольких источников
  • Запрос, если firebase database Android существует!
  • Java + Tomcat, Умирающее соединение с базой данных?
  • Есть ли .NET / C # shell для SQLite?
  • выбрать счетчик приращений в mysql
  • Давайте будем гением компьютера.