使用WinRT 8.1中的sqlite以datetime数据类型保存日期和时间:System.InvalidCastException

时间:2013-09-23 17:47:01

标签: vb.net datetime sqlite windows-runtime type-conversion

我正在尝试在WinRT 8.1中使用日期和时间选择器控件,如下所示:

日期选择器控件

enter image description here

时间选择器控件:

enter image description here

现在在我的表格中声明它们如下所示:

Public Class mydata
        <MaxLength(5), PrimaryKey> _
        Public Property name() As String
        <MaxLength(50)> _
        Public Property date1() As DateTime
        <MaxLength(50)> _
        Public Property date2() As DateTime
End Class 

现在我正在尝试使用它们,如下所示:

Dim dateFormatter As New DateTimeFormatter("shortdate")
Dim timeFormatter As New DateTimeFormatter("shorttime")

Dim selectedDate1 As DateTimeOffset = Me.selectedDate1.Date
Dim combinedate1Value As New DateTimeOffset(New Date(selectedDate1.Year, selectedDate1.Month, selectedDate1.Day) + Me.selectedDate1.Time)


Dim selectedDate2 As DateTimeOffset = Me.selectedDate2.Date
Dim combineddate2Value As New DateTimeOffset(New Date(selectedDate2.Year, selectedDate2.Month, selectedDate2.Day) + Me.selectedDate2.Time)


If CustomerName.Text <> "" Then
      Dim dbpath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "mydata.db")
      Using db = New SQLite.SQLiteConnection(dbpath)
         ' Create the tables if they don't exist
          db.Insert(New person() With {.name = CustomerName.Text.ToString(), .date1 = dateFormatter.Format(combinedate1Value) & " " & timeFormatter.Format(combinedate1Value), .date2= dateFormatter.Format(combinedate2Value) & " " & timeFormatter.Format(combinedate2Value)})

          db.Commit()
          db.Dispose()
          db.Close()
          Dim line = New MessageDialog("Records Inserted")
          Await line.ShowAsync()
      End Using
Else
      Throw New NullReferenceException("Please enter the required fields")
End If

现在问题是在保存时我得到一个异常,如图所示:

enter image description here

所以任何人都让我知道如何使用正确的数据类型将日期保存到我的表中。

1 个答案:

答案 0 :(得分:1)

只有在格式化要显示给用户的字符串时才应使用DateTimeFormatter。由于您尝试格式化后端(数据库)的字符串,因此您应该使用标准格式。此外,SQLite要求日期的特定格式为标准ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。您应该使用.Net日期格式:

combinedate1Value.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture));