我有一个在CREATE TABLE查询中声明为DATETIME的字段,如果我有以下查询并像这样填充DataTable,我将该字段称为BirthDay
:
SQLiteDataAdapter da = new SQLiteDataAdapter("SELECT BirthDay FROM myTable", myConnection);
DataTable dt = new DataTable();
da.Fill(dt);
myDataGridView.DataSource = dt;
myDataGridView
的列BirthDay
的类型为DateTime
,我可以通过myDataGridView.Columns["BirthDay"].ValueType
进行检查。
但是,如果我稍微更改SELECT查询,如下所示:
SQLiteDataAdapter da = new SQLiteDataAdapter("SELECT CASE WHEN 1 THEN BirthDay END AS BirthDay2 FROM myTable", myConnection);
在填写了我的数据表并绑定到myDataGridView之后,我以为BirthDay2
列也是DateTime
类型。但是类型是System.Object
?
我试过使用CAST(... as DATETIME)
,但返回的类型是System.Int64
(我知道SQLite中的DateTime实际上对应于.NET中的Int64
),我想知道如何才能让它返回System.DateTime
作为原始列BirthDay
。
我需要最后的类型(可以通过DataGridViewColumn.ValueType
检查)是DateTime
,这样我就可以使用DataGridViewColumn.Format
将我的日期时间字符串格式化为我想要的格式。
1条答案
按热度按时间vwhgwdsa1#
我们在工作中的团队已经研究这个问题很长时间了。我们的最终结论是,任何 Package 源字段的表达式都会使源数据类型不可用。对于ADO.NET提供程序,使用表达式会导致
System.Object
最终类型,对于ODBC提供程序,它会导致System.String
类型。因此,这完全取决于您使用的数据提供程序。对于数据提供商开发人员来说,为什么会有这样的行为是一个问题(我还没有找到答案)。顺便说一句,.NET框架提供了各种工具来测试给定值是否为预期类型。SQLite 3中只有5种基本数据类型(NULL、INTEGER、REAL、TEXT、BLOB)。因此,在.NET代码中,您可以通过测试3种最常见的类型(整数、实数、文本)来传递您的值。