簡體   English   中英

如何通過C#在SQLite DB中插入和查詢DateTime對象?

[英]How do I insert and query a DateTime object in SQLite DB from C#?

考慮以下代碼片段:

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 * FROM <Table_Name> WHERE DATES = "YYYY-MM-DD"

什么都不返回,而用'>'或'<'替換'='返回正確的結果。

所以我的意思是:

如何從SQLite數據庫查詢Date變量。

如果我的存儲方式存在問題(即不符合1806),如何使之符合要求

如果將日期時間值轉換為字符串並將其放入查詢中,則ADO.NET包裝器無法將日期時間值轉換為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);

關於第二個問題,如果SQLite接近SQL Server,

SELECT *從Date =“ YYYY-MM-DD'的位置將不會返回,因為它可能會隱式將YYYY-MM-DD轉換為YYYY-MM-DD 00:00:00。您可能需要添加一個范圍(例如,更大或更大等於今天,小於明天)。

@Guffa,我在此行上收到“無法從System.DateTime轉換為System.Data.DbType”:

Command.Parameters.Add(“ @ Date”,this.Date);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM