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

发布于 2024-08-26 04:48:07 字数 810 浏览 3 评论 0原文

考虑这段代码:

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类型的一个对象,数据库不存储它(在SQLite论坛的某个地方,有人写到ADO.NET包装器自动将DateTime类型转换为ISO1806格式)

但是当我使用sDate时而不是this.Date(如第一行所示)然后它可以正确存储。

我的问题实际上并没有结束。即使我使用“sDate”,我也必须通过查询检索它。 这就是问题所在

这种格式的任何查询

SELECT * FROM <Table_Name> WHERE DATES = "YYYY-MM-DD"

都不会返回任何内容,而将“=”替换为“>”或“<”返回正确的结果。

所以我的观点是:

如何从 SQLite 数据库查询日期变量。

如果我存储它的方式有问题(即不符合 1806),那么我该如何制作合规

Consider this snippet of code:

string sDate = string.Format("{0:u}", this.Date);

           Conn.Open();
            Command.CommandText = "INSERT INTO TRADES VALUES(" + "\"" + this.Date + "\"" + "," +this.ATR + "," + "\"" + this.BIAS + "\"" + ")";
            Command.ExecuteNonQuery();

Note the "this.Date" part of the command. Now Date is an abject of type DateTime of C# environment, the DB doesnt store it(somewhere in SQLite forum, it was written that ADO.NET wrapper automatically converts DateTime type to ISO1806 format)

But instead of this.Date when I use sDate (shown in the first line) then it stores properly.

My probem actually doesnt end here. Even if I use "sDate", I have to retrieve it through a query. And that is creating the problem

Any query of this format

SELECT * FROM <Table_Name> WHERE DATES = "YYYY-MM-DD"

returns nothing, whereas replacing '=' with '>' or '<' returns right results.

So my point is:

How do I query for Date variables from SQLite Database.

And if there is a problem with the way I stored it (i.e non 1806 compliant), then how do I make it compliant

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

醉生梦死 2024-09-02 04:48:08

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 * FROM <Table_Name> WHERE DATES = @Date";
Command.Parameters.Add("@Date", theDate);

The ADO.NET wrapper can't convert the DateTime values to ISO 8601 (not 1806) if you convert it to a string and put it in the query. You need to use parameters for that:

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();

(Besides, you converted the DateTime value to a string and put in the sDate variable, but then you used the DateTime value to produce the SQL query anyway.)

The same applies when getting the data:

Command.CommandText = "SELECT * FROM <Table_Name> WHERE DATES = @Date";
Command.Parameters.Add("@Date", theDate);
旧情别恋 2024-09-02 04:48:08

关于第二个问题,如果 SQLite 与 SQL Server 接近,则

SELECT * From where Dates = "YYYY-MM-DD' 将不会返回,因为它可能会隐式地将 YYYY-MM-DD 转换为 YYYY-MM-DD 00:00 :00。您可能需要添加一个范围(例如大于或等于今天且小于明天)。

About your second problem, if SQLite is anything close to SQL Server,

SELECT * From where Dates = "YYYY-MM-DD' will not return because it will probably implicitily convert YYYY-MM-DD to YYYY-MM-DD 00:00:00. You might need to add a range (e.g. greater or equal than today and smaller than tomrrow).

高冷爸爸 2024-09-02 04:48:08

@Guffa,我在这一行收到“无法从 System.DateTime 转换为 System.Data.DbType”:

Command.Parameters.Add("@Date", this.Date);

@Guffa, I am getting "Cannot Convert from System.DateTime to System.Data.DbType" on this line:

Command.Parameters.Add("@Date", this.Date);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文