我将Visual Studio 2010与System.Data.SQLite数据提供程序一起使用来创建一个模式,其中一个表'mytable'具有DATETIME类型的列'mydatetime'。我的应用程序(使用该提供程序)在列中存储了C#可空的DateTime值(DateTime?)。表格设计清楚地将列类型标识为“日期时间”。当应用程序在mytable语句SELECT MAX(mydatetime)上执行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?).