2

我将 Visual Studio 2010 与 System.Data.SQLite 数据提供程序一起使用来创建一个模式,其中表“mytable”之一具有 DATETIME 类型的列“mydatetime”。我的应用程序(使用该提供程序)在列中存储了一个 C# 可为空的 DateTime 值(DateTime?)。表格设计清楚地将列类型标识为“日期时间”。当应用程序对语句 SELECT MAX(mydatetime) from mytable 执行 ExecuteScalar 时,返回的结果是一个字符串。

我已经阅读了其他一些讨论日期/时间数据的 SQLite 实现的帖子,但我看不出它是如何应用在这里的。由于架构知道它是一个日期时间,所以数据提供者是否不应该将列值作为 C# DateTime(或可空的 DateTime,在这种情况下)返回,而不管引擎如何存储该值?

每个请求的示例代码:不确定创建表 SQL 的样子,因为我是通过 VS2010 设计器完成的。

至于其余...

//Given factory/connection established/initialized as appropriate for my SQLite database...
DbProviderFactory factory;
DbConnection connection;

// Add a row...
DateTime? dt = DateTime.Parse("2013-06-17 12:25:00");
DbCommand cmd = connection.CreateCommand();
cmd.CommandText = "INSERT INTO MyTable(MyDateTime) VALUES (@datetime)";
DbParameter param = factory.CreateParameter();
param.ParameterName="@datetime";
param.Value = dt;
cmd.Parameters.Add(param);
cmd.ExecuteNonQuery();

// Get the max...
DbCommand cmd2 = connection.CreateCommand();
cmd2.CommandText = "SELECT MAX(MyDateTime) FROM MyTable";
object result = cmd2.ExecuteScalar();

// Ideally, should be able to cast result to DateTime?,
// but in reality, it's a string and has to be parsed back to DateTime first.
// Other providers don't do this; Both OLEDB for Access and MySQL
// return a boxed DateTime (or DateTime?).
4

0 回答 0