【发布时间】:2021-12-20 16:04:16
【问题描述】:
我正在开发 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"”错误。
我知道将两个日期作为参数传递有问题。谁能帮帮我?
【问题讨论】:
-
你一定忘记了日期文字周围的单引号。
-
@LaurenzAlbe 来自网络表单,即使使用单引号,也会导致潜在的 SQL 注入
-
@Bruno 对,这就是你必须正确转义这些值的原因。
-
@LaurenzAlbe 转义值的问题在于,作为这些工具的用户,通常很难正确处理 (here is a similar example with PHP/MySQL):当客户端库支持时,通常最好使用参数化查询传递参数它。
-
@Bruno 再次,非常正确。我只是想指出错误的原因。
标签: c# postgresql date asp.net-core-mvc