#c# #sqlite
#c# #sqlite
Вопрос:
Я программирую библиотечное приложение на MVC. Я впервые использую подключение к базе данных и Dapper. MVC для SQLite
Моя база данных выглядит так :
- Имя таблицы: SubscriberBook
- Столбцы: SubscriberID / BookID / Дата заимствования / Дата возврата
Когда заимствование создается, для ReturnDate устанавливается значение null .
Когда подписчик возвращает книгу, я хочу сохранить другие данные и ОБНОВИТЬ ReturnDate с текущей датой, например DateTime.now .Галочки.
Модель :
public class SubscriberBookEntity
{
public int BookId { get; set; }
public int SubscriberId { get; set; }
public DateTime BorrowDate { get; set; }
public DateTime ReturnDate { get; set; }
}
Контроллер, вызовите Create Update :
[HttpPost]
public ActionResult SubscriberBorrow(Borrow borrow)
{
SubscriberEntity subscriberEntity = new SubscriberEntity();
SubscriberBookEntity subscriberBookEntity = new SubscriberBookEntity();
List<SubscriberBookEntity> subscriberBookEntityList = new List<SubscriberBookEntity>();
subscriberBookEntityList = Manager.GetAllBorrow();
foreach (Book borrowBook in borrow.Library.BookList)
{
if (borrowBook.IsChecked amp;amp; Error == false)
{
subscriberBookEntity.DateEmprunt = DateTime.Now;
subscriberBookEntity.DateRetour = new DateTime();
Manager.CreateBorrow(borrow.SelectedSubscriberId, borrowBook.Id, subscriberBookEntity.DateEmprunt, subscriberBookEntity.DateRetour);
subscriberBookEntityList = Manager.GetAllBorrow();
}
}
if (borrow.Button.Equals("Return"))
{
foreach (Book borrowBook in borrow.Library.BookList)
{
if (borrowBook.IsChecked)
{
subscriberBookEntity.ReturnDate = DateTime.Now;
Manager.UpdateBorrow(subscriberBookEntity);
}
}
Создать :
public static void CreateBorrow(int subscriberId, int bookId, DateTime dateEmprunt, DateTime dateRetour)
{
using (var connection = new SQLiteConnection(GetConnectionString()))
{
connection.Execute("INSERT INTO SubscriberBook (SubscriberId, BookId, DateEmprunt) VALUES (@subscriberId, @bookId, @dateEmprunt)",
new
{
SubscriberId = subscriberId,
BookId = bookId,
DateEmprunt = dateEmprunt.Ticks,
});
}
}
Получить :
public static List<SubscriberBookEntity> GetAllBorrow()
{
using (var connection = new SQLiteConnection(GetConnectionString()))
{
return connection.Query<SubscriberBookEntity>("SELECT BookId, SubscriberId FROM SubscriberBook").ToList();
}
}
Обновить :
public static void UpdateBorrow(SubscriberBookEntity subscriberBookEntity)
{
using (var connection = new SQLiteConnection(GetConnectionString()))
{
if(subscriberBookEntity != null)
{
connection.Execute("UPDATE SubscriberBook SET ReturnDate = @returnDate WHERE BookId = @bookId AND SubscriberId = @subscriberId",
new
{
returnDate = subscriberBookEntity.ReturnDate.Ticks,
bookId = subscriberBookEntity.BookId,
subscriberId = subscriberBookEntity.SubscriberId,
});
}
}
}
Я не получил ошибки, но в моей базе данных ничего не изменилось. Значение ReturnBorrow по-прежнему равно нулю.
Спасибо за ваше терпение и вашу помощь.
Комментарии:
1. Вы используете Dapper? Можете ли вы получить возвращаемое значение метода Execute и проверить, отличается ли оно от нуля?
2. Как
subscriberBookEntity
создается и заполняется?3. Привет, извините за опоздание, но я больше не могу запустить свое приложение. IIS Express не запускается… Я обновил свой пост с помощью метода, который заполнил subscriberBookEntity . И да, я использую dapper.
Ответ №1:
После некоторых исследований мой код в контроллере для «return» не использует правильные переменные.
После исправлений :
if (borrow.Button.Equals("Retourner"))
{
foreach (SubscriberBookEntity subscriberBookEntity in subscriberBookEntityList)
{
foreach(Book borrowBook in borrow.Library.BookList)
{
if(borrowBook.IsChecked amp;amp; borrowBook.Id == subscriberBook.BookId amp;amp; subscriberBook.SubscriberId == borrow.SelectedSubscriberId)
{
subscriberBook.DateRetour = DateTime.Now;
Manager.UpdateBorrow(subscriberBook);
}
}
}
List<SubscriberBookEntity> SubscriberBookEntityList = Manager.GetAllBorrow();
}
Спасибо @Steve и @Patrick Hofman за их советы.