在Xamarin Forms中将日期时间保存到数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Xamarin Forms中将日期时间保存到数据库相关的知识,希望对你有一定的参考价值。

我想更新lastsync列,问题是数据无法正常保存。我使用了Convert.ToDateTime和DateTime.Parse,但数据仍然无法正常保存。我正在“01/01/0001 12:00:00”。我究竟做错了什么?

public DateTime LastUpdated { get; set; }

var current_datetime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");

string ofretailer_group_sql = "UPDATE tblRetailerGroup SET LastUpdated = '" + DateTime.Parse(current_datetime) + "' WHERE RetailerCode = '" + retailerCode + "'";
await conn.ExecuteAsync(ofretailer_group_sql);
答案

如果从TimeDate字段获取01/01/0001 12:00:00,则表示从未设置/更新。

我个人使用查询(?)参数来允许SQL语句字符串成为一堆永远不会更改的常量,然后您只需按照它们属于SQL语句的顺序为该查询分配参数:

Example:

const string ofretailer_group_sql = "UPDATE tblRetailerGroup SET LastUpdated = ? WHERE RetailerCode = ?";

await conn.ExecuteAsync(ofretailer_group_sql, new object[] { DateTime.UtcNow, retailerCode });

注意:我使用UtcNow删除DST和手机设备时区更改问题...

另一答案

您应该为文件管理创建依赖服务,以便在iosandroid级别保存和获取数据。以下是如何在文件中保存和获取日期时间的代码。

PCL项目: - 创建界面

public interface IFileHelper
{

    void SaveLastUpdatedDateTimeForData(DateTime dateTime);

    DateTime GetLastUpdatedDateTimeForData();

}

IOS / Android项目: - 创建一个类以将数据保存到文件中。

[assembly: Dependency(typeof(FileHelper))]
namespace ABCD.iOS 
{
 public class FileHelper: IFileHelper 
{

  public void SaveLastUpdatedDateTimeForData(DateTime dateTime) 
{
   try {
    string docFolder = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
    string filePath = Path.Combine(docFolder, "..", "Library", "updatetime.txt");
    File.WriteAllText(filePath, dateTime.Ticks.ToString());
   } catch (Exception ex) {
    Debug.WriteLine(ex.Message);
   }


  }

  public DateTime GetLastUpdatedDateTimeForData() 
{
   //bool status = false;
   string docFolder = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
   string filePath = Path.Combine(docFolder, "..", "Library", "updatetime.txt");
   if (!File.Exists(filePath)) {
    return new DateTime(2000, 1, 1);
   }

   try {
    string content = File.ReadAllText(filePath);
    DateTime dt = new DateTime(long.Parse(content));
    return dt;
   } catch (Exception ex) {
    Debug.WriteLine("exception in GetLastUpdatedDateTimeForData : {0}", ex.Message);
    return DateTime.MinValue;
   }
  }

 }
}

在Client / PCL项目中调用依赖服务:

保存更新日期时间:

DependencyService.Get<IFileHelper>().SaveLastUpdatedDateTimeForData(DateTime.Now);

获取更新日期时间:

var lastUpdatedDateTime = DependencyService.Get<IFileHelper>().GetLastUpdatedDateTimeForData();
另一答案

它似乎是Date-String-Date的转换问题。

我会直接在Db中保存第一个DateTime.now并检查值是否正确保存。如果这有效,那么肯定是转换问题。然后你可以尝试以下解决方案。

我做这样的转换:

DateTime date = DateTime.ParseExact(current_datetime,“yyyy-MM-dd hh:mm:ss”,System.Globalization.CultureInfo.InvariantCulture);

以上是关于在Xamarin Forms中将日期时间保存到数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Xamarin TimePicker 值保存到数据库?

弹出窗口中的 Xamarin.Forms 日期选择器

在 Xamarin.Forms 中将 HeightRequest 设置回 Auto

在 Xamarin.Forms 上的 XAML 中将 BindingContext 设置为 ViewModel

在 Xamarin.Forms 中将默认的深色 Android 主题更改为白色?

使用 PlatformConfiguration (Xamarin.Forms 2.3.3) 在 UWP 中将工具栏移动到底部