簡體   English   中英

sql 查詢中日期的訪問數據類型不匹配

[英]Access Data type mismatch of date in sql query

我正在嘗試從我的訪問數據庫中獲取在 2 個日期之間訂購的訂單列表。 這是我的查詢:

"SELECT * FROM Orders WHERE OrderDate >= '#" + DateTime.Parse(txtDate.Text) + "#' AND OrderDate <= '#" + DateTime.Parse(txtEndDate.Text) + "#'";

2 個文本框直接從 2 個 ajax 日歷擴展器接收日期。 我已經確保第一個日期在第二個日期之前,並且我已經確保插入數據庫的數據也像“#”+date+“#”一樣插入,但我“查詢表達式中的數據類型仍然不匹配” . 任何人都可以嘗試找出我的查詢有問題嗎?

假設你有這樣的數據:

var txtDate = new { Text = "2020-08-01" };
var txtEndDate = new { Text = "2020-08-01" };

您的查詢可能如下所示:

var fromDate = DateTime.ParseExact(txtDate.Text, "yyyy-MM-dd",
                                 CultureInfo.InvariantCulture).ToString("yyyMMdd");

var toDate = DateTime.ParseExact(txtEndDate.Text, "yyyy-MM-dd",
                             CultureInfo.InvariantCulture).ToString("yyyMMdd");

var query =
    $"SELECT * FROM Orders WHERE OrderDate>='{fromDate}' AND OrderDate<='{toDate}'";

或者最后一部分可以是:

var query =
    $"SELECT * FROM Orders WHERE OrderDate BETWEEN '{fromDate}' AND '{toDate}'";

它是日期表達式的分隔符,而不是單引號 並且應該強制使用日期值的格式化文本表達式。 因此:

"SELECT * FROM Orders WHERE OrderDate >= #" + DateTime.Parse(txtDate.Text).ToString("yyyy'/'MM'/'dd") + "# AND OrderDate <= #" + DateTime.Parse(txtEndDate.Text).ToString("yyyy'/'MM'/'dd") + "#";

也就是說,查看如何使用參數運行查詢。 它需要更多的代碼行,但更容易調試和正確。

您應該為安全性和類型安全性使用參數化查詢

Access 數據庫查詢使用? 作為您傳遞的參數的占位符。

OleDbCommand command = new OleDbCommand();

// I assume you have an oledb connection object and it is in open state
command.Connection = myConnection;
command.CommandText = "SELECT * FROM Orders WHERE OrderDate >= ? AND OrderDate <= ?";

// Please note that the name of the parameters are redundant and not used
command.Parameters.AddWithValue("StartDate", DateTime.Parse(txtDate.Text));
command.Parameters.AddWithValue("EndDate", DateTime.Parse(txtEndDate.Text));

// You can also use your data adatper. This is just an example
command.ExecuteReader();

暫無
暫無

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

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