考虑这段代码:
string sDate = string.Format("{0:u}", this.Date); Conn.Open(); Command.CommandText = "INSERT INTO TRADES VALUES(" + "\"" + this.Date + "\"" + "," +this.ATR + "," + "\"" + this.BIAS + "\"" + ")"; Command.ExecuteNonQuery();
注意命令的"this.Date"部分.现在Date是C#环境的DateTime类型,DB没有存储它(在SQLite论坛的某个地方,写的是ADO.NET包装器自动将DateTime类型转换为ISO1806格式)
但是当我使用sDate(显示在第一行)时它代替this.Date然后它存储正确.
我的探索实际上并没有结束.即使我使用"sDate",我也必须通过查询来检索它.并考虑创建问题
对此格式的任何查询
SELECT * FROMWHERE DATES = "YYYY-MM-DD"
什么都不返回,而用'>'或'<'替换'='会返回正确的结果.
所以我的观点是:
如何从SQLite数据库查询日期变量.
如果我存储它的方式有问题(即非1806兼容),那么我该如何使其兼容
如果将DateTime值转换为字符串并将其放入查询中,则ADO.NET包装器无法将DateTime值转换为ISO 8601(而不是1806).你需要使用参数:
Command.CommandText = "INSERT INTO TRADES VALUES (@Date, @Atr, @Bias)"; Command.Parameters.Add("@Date", this.Date); Command.Parameters.Add("@Atr", this.ATR); Command.Parameters.Add("@Bias", this.BIAS); Conn.Open(); Command.ExecuteNonQuery();
(此外,您将DateTime值转换为字符串并放入sDate变量,但是无论如何您使用DateTime值来生成SQL查询.)
获取数据时也是如此:
Command.CommandText = "SELECT * FROMWHERE DATES = @Date"; Command.Parameters.Add("@Date", theDate);