我正在构建一个使用本地数据库的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()
答案 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
吗?这个名字似乎表明了这一点。