我正在研究 ASP.NET CORE MVC 專案
我需要從前端傳遞兩個日期,如圖所示:HERE
我的觀點:
<form method="post" asp-controller="HOME" asp-action="AllTransactionsList">
<label> Start Date</label>
<input type="date" name="startDate"></br>
<label> End Date</label>
<input type="date" name="endDate"></br>
<button type="submit">ADD</button>
</form>
我的控制器方法:
public IActionResult AllTransactionsList(DateTime startDate, DateTime endDate)
{
var dataset = new DataSet();
using var connection = new NpgsqlConnection(connString);
connection.Open();
Console.WriteLine(startDate);
var query = String.Format(@"SELECT accounts.account,accounts.type,DATE(transactions.date),transactions.amount,transactions.note FROM transactions FULL JOIN accounts ON transactions.accountid=accounts.accountid WHERE transactions.date BETWEEN {0} AND {1};", startDate, endDate);
using (var command = new NpgsqlCommand(query, connection))
{
var adapter = new NpgsqlDataAdapter(command);
adapter.Fill(dataset);
}
return View(dataset);
}
但是在執行 webapp 時,我收到“PostgresException: 42601: syntax error at or near "00"”錯誤。
我知道將兩個日期作為引數傳遞有問題。誰能幫我?
uj5u.com熱心網友回復:
您不應該像這樣直接在查詢字串中傳遞引數:
var query = String.Format(@"SELECT ... BETWEEN {0} AND {1};", startDate, endDate);
首先,像這樣在查詢字串中合并引數很可能會產生語法錯誤(如您所見),除非它本身是有效的 SQL。
其次,更重要的是,這將導致 SQL 注入漏洞(即使您要在 周圍加上引號'{0}')。
相反,您應該使用占位符傳遞引數。這是檔案中的示例:
using (var cmd = new NpgsqlCommand("INSERT INTO table (col1) VALUES (@p)", conn)) { cmd.Parameters.AddWithValue("p", "some_value"); cmd.ExecuteNonQuery(); }
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/387557.html
標籤:C# PostgreSQL的 日期 asp.net-core-mvc
