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

C# 如何从C在SQLite DB中插入和查询DateTime对象?,c#,asp.net,sqlite,ado.net,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.E

考虑以下代码片段:

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 forum中存储它的某个位置,它是由ADO.NET包装器自动将DateTime类型转换为ISO1806格式编写的

但是,当我使用第一行中显示的sDate时,它会正确存储

我的问题实际上并没有到此为止。即使我使用sDate,我也必须通过查询来检索它。这就产生了问题

此格式的任何查询

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

不返回任何内容,而将“=”替换为“>”或“则ADO.NET包装器无法将日期时间值转换为ISO 8601,如果您将其转换为字符串并将其放入查询中,则不能。您需要使用以下参数:

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

如果将DateTime值转换为字符串并放入查询中,则ADO.NET包装器无法将其转换为ISO 8601。您需要使用以下参数:

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

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


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

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


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

@Guffa,我无法在此行上从System.DateTime转换为System.Data.DbType:


命令参数。Add@Date,此日期

@Guffa,我无法在此行上从System.DateTime转换为System.Data.DbType:


命令参数。Add@Date,此日期

您正在使用哪个SQLite库?System.Data.SQLite,SQLite的ADO.NET包装器SQLite有几个ADO.NET包装器。System.Data.SQLite是最常见的,但是如果您将其称为ADO.NET包装器,则会冒犯其他包装器提供程序。@Sam,我的错,我不清楚您使用的是哪个SQLite库?System.Data.SQLite,SQLite的ADO.NET包装器SQLite有几个ADO.NET包装器。System.Data.SQLite是最常见的,但是如果您将其称为ADO.NET包装器,则会冒犯其他包装器提供程序。@Sam,我的错,我不清楚这一点是的,我只是展示了另一种选择。我确实写了这封信并核对了一下。日期和日期。这个日期有效,这个日期无效。谢谢Guffa,我想也许问题已经解决了,让我插上电源检查一下是的,我只是在展示另一种选择。我确实写了这封信并核对了一下。日期和日期。这个日期有效,这个日期无效。谢谢Guffa,我想问题可能已经解决了,让我插上电源,检查一下。如果我没有足够明确地理解这一点,很抱歉。当我说SQLite与SQLServer非常接近时,我的意思是从查询语言的角度来看。我以前没有接触过SQLite,而且我意识到其他风格的SQL在执行基本命令的方式上可能会有差异。如果我没有足够明确地理解这一点,那就很抱歉了。当我说SQLite与SQLServer非常接近时,我的意思是从查询语言的角度来看。我以前没有接触过SQLite,我意识到其他风格的SQL在执行基本命令的方式上可能会有所不同。检查文档中的可用内容,最好使用重载,在重载中可以指定数据类型,例如:Command.Parameters。Add@Date,DbType.DateTime.Value=this.Date;有一些不同的重载用于创建参数。检查文档中的可用内容,最好使用重载,在重载中可以指定数据类型,例如:Command.Parameters。Add@Date,DbType.DateTime.Value=this.Date;