我正在建造一個query string這樣的。
string query = "SELECT * FROM " table " where DATE(Date) > " howFarBack.ToString("yyyy-MM-dd");
然而,當它執行
while (dataReader.Read())
我看到日期早于howFarBack????
public List<OHLC> Select(string table, System.DateTime howFarBack)
{
string query = "SELECT * FROM " table " where DATE(Date) > " howFarBack.ToString("yyyy-MM-dd");
//Create a list to store the result
var list = new List<OHLC>();
//Open connection
if (OpenConnection() == true)
{
//Create Command
MySqlCommand cmd = new MySqlCommand(query, connection);
//Create a data reader and Execute the command
MySqlDataReader dataReader = cmd.ExecuteReader();
//Read the data and store them in the list
while (dataReader.Read())
{
var ohlc = new OHLC();
ohlc.Date = (System.DateTime)dataReader[0];
ohlc.Open = Math.Round((double)dataReader[1], 2);
uj5u.com熱心網友回復:
如有疑問,請嘗試通過檢查生成的 SQL 查詢而不是格式化 SQL 查詢的 C# 代碼進行除錯。
我猜您的查詢在日期文字周圍缺少單引號分隔符。所以它最終是一個查詢,如:
SELECT * FROM MyTable where DATE(Date) > 2021-11-02
但是 2021-11-02 不是日期,它是一個計算結果為整數的算術運算式:2021 減 11 減 2 = 2008。這肯定會匹配很多您不希望它匹配的日期。
您可以通過確保在日期文字周圍使用正確型別的引號來解決這個問題(它實際上是一個字串文字,與日期相比被解釋為日期)。
SELECT * FROM MyTable where DATE(Date) > '2021-11-02'
但是使用查詢引數要好得多,如上面的評論中所述。
SELECT * FROM MyTable where DATE(Date) > @howFarBack
那你就不需要引號了。事實上,您不能在引數占位符周圍使用引號。
有關在 C# 中的 SQL 陳述句中使用引數的資訊,請參閱C# 的 MySQL 引數化查詢或許多其他參考資料。
還要記住,引數只能用于代替單個文字值。您不能將引數用于表或列識別符號、值串列或 SQL 關鍵字等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/347004.html
