将TimeSpan存储在Windows Phone 8应用程序本地数据库中

时间:2014-04-29 07:18:54

标签: c# windows-phone-8

我正在构建一个使用本地数据库的Windows Phone 8应用程序。这一切都很好,但我有一个TimeSpan值,我想保存在数据库中。但是当应用程序尝试使用以下代码创建数据库时,应用程序崩溃:

private TimeSpan _startTime;
[Column]
public TimeSpan StartTime
{
    get { return _startTime; }
    set
    {
        if (_startTime != value)
        {
            NotifyPropertyChanging("StartTime");
            _startTime = value;
            NotifyPropertyChanged("StartTime");
        }
    }
}

所以我将第二行更改为[Column(DbType = "DATETIME")],这样可以正常工作。但这不是我想要的。现在它存储DATETIME,而我只想存储时间。有谁知道如何做到这一点?

错误(荷兰语):

A first chance exception of type 'System.Data.SqlServerCe.SqlCeException' occurred in Microsoft.Phone.Data.Internal.ni.dll
System.Data.SqlServerCe.SqlCeException: Het opgegeven gegevenstype is ongeldig. [ Data type (if known) = TIME ]
   at System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 hr)
   at System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan()
   at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior behavior, String method, ResultSetOptions options)
   at System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery()
   at System.Data.Linq.SqlClient.SqlProvider.ExecuteCommand(String command)
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.CreateDatabase()
   at System.Data.Linq.DataContext.CreateDatabase()
   at MyWPApp.Controller..ctor()

1 个答案:

答案 0 :(得分:3)

建议的解决方案here是将TimeSpan自己转换为datetime对象或varchar。我个人建议将它保存为数字类型,如整数,例如以秒为单位测量。

你可以做这样的事情来毫不费力地进行转换。 StartTime保存到数据库,而您可以在软件中使用StartTimeTS

[Column]
public int StartTime
{
    get
    {
        return this.StartTimeTS.TotalSeconds;
    }
    set
    {
        this.StartTimeTS = new TimeSpan(0, 0, value);
    }
}

private TimeSpan _startTime;
public TimeSpan StartTimeTS
{
    get { return _startTime; }
    set
    {
        if (_startTime != value)
        {
            NotifyPropertyChanging("StartTime");
            _startTime = value;
            NotifyPropertyChanged("StartTime");
        }
    }
}

另外,.NET中的数据类型确实需要TimeSpan而不仅仅是DateTime吗?这个名字似乎表明了这一点。