从 SQLite 数据库读取日期时间值并使用 WPF 将其分配给 C# 中的 datepicker
Posted
技术标签:
【中文标题】从 SQLite 数据库读取日期时间值并使用 WPF 将其分配给 C# 中的 datepicker【英文标题】:Reading a datetime value from a SQLite database and assigning it to datepicker in C# using WPF 【发布时间】:2013-10-16 13:55:28 【问题描述】:我想从 SQLite 数据库中读取日期时间值并将其分配给日期选择器控件。
这是我的代码:
try
sqlitecon.Open();
string Query = "Select * from Customer_New where Cust_Id='" + val + "' ";
SQLiteCommand createCommand = new SQLiteCommand(Query, sqlitecon);
// createCommand.ExecuteNonQuery();
SQLiteDataReader dr = createCommand.ExecuteReader();
while(dr.Read())
date_open.DisplayDate = Convert.ToDateTime(dr.GetString(0));
Date_Joining.DisplayDate = Convert.ToDateTime(dr.GetString(1));
txt_Title.Text = dr.GetString(3);
txt_cardnum.Text =dr.GetString(4)
sqlitecon.Close();
catch (Exception ex)
MessageBox.Show(ex.Message);
但它给出了这个错误:“指定的转换无效”。如何做呢?。
【问题讨论】:
数据库中日期的格式是什么? SQLite 数据库没有真正的日期,只有字符串,所以它可能是 YYYY-MM-DD 或 MM/DD/YYYY 或其他。 【参考方案1】:如果您已经从数据库中获得DateTime
,则不应将其转换为字符串。然后只需使用:
date_open.DisplayDate = dr.GetDateTime(0);
而不是
date_open.DisplayDate = Convert.ToDateTime(dr.GetString(0));
如果不是DateTime
而是string
(varchar
),您应该考虑更改它。
编辑:还请注意,您正在使用查询的两个不同列将数据时间分配给您的DateTimePicker
,因此在上述行之后您执行以下操作:
date_open.DisplayDate = Convert.ToDateTime(dr.GetString(1));
其中一个必须是不正确的。哪一列是日期时间列?
此外,您应该对查询进行参数化以避免 sql 注入:
string Query = "Select * from Customer_New where Cust_Id=?1";
command.Parameters.Add(new SQLiteParameter ParameterName = "1", Value = val );
(注意我没用过SqlLite,所以代码未经测试)
【讨论】:
它也给出错误:“字符串未被识别为有效数据时间” @getche:我已经编辑了我的答案。您使用的是两列,哪一列是正确的? 我已经编辑了我的问题。现在您可以看到第二列。您的查询无效 SQLite 没有日期类型。【参考方案2】:Select strftime([date],0) as [date] from Customer_New where Cust_Id=?1
【讨论】:
这可能会有所帮助,但是有太多未知数,例如数据库中日期的格式以及Convert.ToDateTime
认为适合使用的当前文化的格式。
以上是关于从 SQLite 数据库读取日期时间值并使用 WPF 将其分配给 C# 中的 datepicker的主要内容,如果未能解决你的问题,请参考以下文章