Хранение значений в базе данных, только если они были изменены - PullRequest
1 голос
/ 30 декабря 2010

Я создаю приложение базы данных, используя Visual C # Express и MySQL.Проблема в том, что я хочу сохранять данные в базе данных из форм C # только в том случае, если данные действительно были изменены, и теперь я делаю это так, чтобы при нажатии кнопки «Сохранить» все поля в формесохранены в базе данных, независимо от того, были ли они изменены.

Решение, которое я нашел, состоит в том, чтобы просто проверить каждое поле в форме, было ли оно изменено, и затем изменить команду SQL соответственно, т.е.

//when the details are loaded into the form
String strOriginalName = txtFirstname.Text;

//when the save button is checked
if(strOriginalName != txtFirstname.Text)
{
String strUpdate = "UPDATE table SET firstName = txtFirstname.Text";
MySqlCommand cmdUpdate = new MySqlCommand(strUpdate, connection);
cmdUpdate.ExecuteNonQuery();
} 

У кого-нибудь еще есть лучшее или альтернативное решение?Спасибо за вашу помощь, если я был неопределен в какой-либо части, пожалуйста, дайте мне знать, и я могу попытаться объяснить дальше.

Ответы [ 4 ]

2 голосов
/ 30 декабря 2010

Я предлагаю использовать некоторые OR Mapper (NHibernate), например. Это все сделает за вас. Кроме того, это даст вам кеширование и другие интересные вещи бесплатно:)

Уроки, извлеченные на будущее, бесценны, и ваши последующие приложения будут расти быстрее и быстрее. :)

0 голосов
/ 30 декабря 2010

Посмотрите, как ORM реализуют эту функцию,

Поиск NotifyPropertyChanged и Object Change Tracking.

0 голосов
/ 30 декабря 2010

Если у вас есть одно поле в форме, тогда это правильно ...

, но если в вашей форме несколько значений (полей), вам следует использовать 1 переменную-флаг.

Как только любой текст будет изменен, вы должны установить этот флаг в true и обновить его.

0 голосов
/ 30 декабря 2010

Имейте один запрос на обновление - если у вас нет сотен параметров, вы не должны видеть большую проблему с производительностью.

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

Обновлять базу данных только тогда, когда флаг действительно true.


В качестве альтернативы используйте ORM, который реализует Единицу работы , которая должна обработать это автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...