【问题标题】:How to insert a date in sqlite from a monthCalendar control - c# - Windows Forms如何从monthCalendar控件在sqlite中插入日期 - c# - Windows Forms
【发布时间】:2020-08-27 23:07:11
【问题描述】:

我想将选定的日期从 monthCalender 控件复制到 c# 中的 sqlite db。 试图用 ToString 来做:给了我这种形式的字符串(MM-DD-YYYY-00:00:00 AM)和一个逻辑错误 来自sqlite。 尝试使用 ToShortDateString:它给了我这个字符串 (MM-DD-YYYY)。 sqlite 没有错误,直到再次检查记录。这次错误是“字符串无法识别 作为有效的日期时间”。 我知道 sqlite 的日期格式是 YYYY-MM-DD。 我必须转换字符串吗?

    string startdate = monthCalendar1.SelectionRange.Start.ToShortDateString();
    string query = $"UPDATE status SET user = {listBox1.SelectedValue}" +
                       $" , userbadge = {listBox2.SelectedValue} "+ 
                       $" , date = {startdate}" +
                       $" WHERE status.id = {index}"; 
           
    openConnection();
    SQLiteCommand com = new SQLiteCommand(query, connection);
    com.ExecuteNonQuery();
    closeConnection();

【问题讨论】:

  • 表定义是什么?您使用的是哪个驱动程序?我不建议将其用于执行更新。它会打开您的应用程序以进行 SQL 注入。
  • 我真的建议使用 Parameters (如果这是 Microsoft.Data.SQLite) 。它们也使处理 DateTime 变得更容易。事实上,这可能会让你的问题完全消失。

标签: c# sqlite date


【解决方案1】:

我认为您可以通过使用Parameters 来缓解您的问题:

command.CommandText =
@"
    UPDATE status SET user = $user, userbadge = $userbadge, date = $startdate WHERE status.id = $index
";
command.Parameters.AddWithValue("$user", listBox1.SelectedValue);
command.Parameters.AddWithValue("$userbadge", listBox2.SelectedValue);
command.Parameters.AddWithValue("$startdate ", startdate );
command.Parameters.AddWithValue("$index", index);

根据this docu,该值将保存为“yyyy-MM-dd HH:mm:ss.FFFFFFF”。

【讨论】:

    【解决方案2】:

    带有参数的解决方案导致了同样的错误。 进一步搜索后,我发现转换字符串可能会 做这项工作。是的,它成功了!!!

    DateTime datetime = Convert.ToDateTime(startdate);
    

    【讨论】:

    • 啊,我不知何故认为startDate 已经DateTime
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2011-06-30
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多