考虑这段代码:
string sDate = string.Format("{0:u}", this.Date);
Conn.Open();
Command.CommandText = "INSERT INTO TRADES VALUES(" + "\"" + this.Date + "\"" + "," +this.ATR + "," + "\"" + this.BIAS + "\"" + ")";
Command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
注意命令的"this.Date"部分.现在Date是C#环境的DateTime类型,DB没有存储它(在SQLite论坛的某个地方,写的是ADO.NET包装器自动将DateTime类型转换为ISO1806格式)
但是当我使用sDate(显示在第一行)时它代替this.Date然后它存储正确.
我的探索实际上并没有结束.即使我使用"sDate",我也必须通过查询来检索它.并考虑创建问题
对此格式的任何查询
SELECT * FROM <Table_Name> WHERE DATES = "YYYY-MM-DD"
Run Code Online (Sandbox Code Playgroud)
什么都不返回,而用'>'或'<'替换'='会返回正确的结果.
所以我的观点是:
如何从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();
Run Code Online (Sandbox Code Playgroud)
(此外,您将DateTime值转换为字符串并放入sDate变量,但是无论如何您使用DateTime值来生成SQL查询.)
获取数据时也是如此:
Command.CommandText = "SELECT * FROM <Table_Name> WHERE DATES = @Date";
Command.Parameters.Add("@Date", theDate);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6283 次 |
| 最近记录: |