3

问题标题不清楚,但是通过我的以下描述,这个问题非常清楚:

我在 CREATE TABLE 查询中有一个声明为 datetime 的字段BirthDay,如果我有以下查询并像这样填写 DataTable,我称之为该字段:

SQLiteDataAdapter da = new SQLiteDataAdapter("SELECT BirthDay FROM myTable", myConnection);
DataTable dt = new DataTable();
da.Fill(dt);
myDataGridView.DataSource = dt;

的列BirthDaymyDataGridView类型,DateTime我可以通过 myDataGridView.Columns["BirthDay"].ValueType.

但是,如果我像这样更改 SELECT 查询:

SQLiteDataAdapter da = new SQLiteDataAdapter("SELECT CASE WHEN 1 THEN BirthDay END AS BirthDay2 FROM myTable", myConnection);

我希望在填写我的 DataTable 并绑定到 myDataGridView 之后,该BirthDay2列也是类型。DateTime但是类型是System.Object?

我试过了,CAST(... as DATETIME)但返回的类型是System.Int64(我知道 SQLite 中的 DATETIME 实际上对应Int64于 .NET 中的),我想知道如何让它System.DateTime作为原始列返回BirthDay

我需要最终类型(可以通过 进行检查DataGridViewColumn.ValueType),DateTime以便我可以使用DataGridViewColumn.Format我想要的格式来格式化我的日期时间字符串。

您的帮助将不胜感激!

4

1 回答 1

0

我们的工作团队长期以来一直在研究这个问题。我们的最终结论是,任何包装源字段的表达式都会使源数据类型不可用。对于 ADO.NET 提供程序,使用表达式导致System.Object最终类型,对于 ODBC 提供程序,它导致System.String类型。所以它完全取决于你使用的数据提供者。为什么它会以这种方式运行是数据提供者开发人员的一个问题(我还没有找到答案)。顺便说一句,.NET Framework 提供了多种工具来测试给定值是否为预期类型。SQLite 3 中只有 5 种基本数据类型(NULL、INTEGER、REAL、TEXT、BLOB)。因此,在 .NET 代码中,您可以通过 3 种最常见类型(INTEGER、REAL、TEXT)的测试来传递您的值。

于 2013-07-15T11:01:36.777 回答