如何在C#中的SQLite DB中插入和查询DateTime对象?

1 c# asp.net sqlite ado.net

考虑这段代码:

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兼容),那么我该如何使其兼容

Guf*_*ffa 5

如果将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)