c# - PostgresException:42883:运算符不存在:@ 字符变化
问题描述
我试图在剃须刀页面 c# 中创建一个预订页面。如果我进行预订,它也会出现在用户的页面上。我在每个预订旁边都做了一个按钮,这样您就可以删除预订。预订页面上仅显示日期和地点。当我尝试从页面中删除它时,我收到此错误: PostgresException:42883:运算符不存在:@ 字符变化并且不知道为什么。这是c#方面:
public void OnPostRemove(ReservationModel reservation)
{
DateTime convdayid = Convert.ToDateTime(reservation.Dayid);
DeleteReservation(convdayid, reservation.Locationid);
}
public void DeleteReservation(DateTime convdayid, string Locationid)
{
var cs = Database.Database.Connector();
using var con = new NpgsqlConnection(cs);
con.Open();
var sql = "DELETE FROM reservation WHERE locationid = @Locationid AND dayid = @convdayid;";
using var cmd = new NpgsqlCommand(sql, con);
cmd.Parameters.AddWithValue("locationnid", Locationid);
cmd.Parameters.AddWithValue("dayid", convdayid);
cmd.Prepare();
cmd.ExecuteNonQuery();
}
如有必要,这是 html 方面
@foreach(var reservations in @Model.ShowReservation())
{
<form method="post">
<fieldset>
<div class="form-group">
<tr>
<img class="img-fluid" src="/Images/Reservation.png"/>
<td>
@Html.DisplayFor(m => reservations.Dayid)
<input type="hidden" name="Dayid" value="@Html.DisplayFor(m => reservations.Dayid)"/>
</td>
<td>
@Html.DisplayFor(m => reservations.Locationid)
<input type="hidden" name="Locationid" value="@Html.DisplayFor(m => reservations.Locationid)"/>
</td>
</tr>
<button type="submit" value="Submit" asp-page-handler="Remove" class="btn btn-dark btn-sm">X</button>
</div>
</fieldset>
</form>
<hr>
}
<hr>
编辑:
错误得到了解决,但由于某种原因,特定行没有从数据库中删除。什么都没发生。这就是我对代码所做的更改。
public void OnPostRemove(ReservationModel reservation)
{
DateTime convdayid = Convert.ToDateTime(reservation.Dayid);
DeleteReservation(convdayid, reservation.Locationid);
}
public void DeleteReservation(DateTime convdayid, string Locationid)
{
var cs = Database.Database.Connector();
using var con = new NpgsqlConnection(cs);
con.Open();
var sql = "DELETE FROM reservation WHERE locationid = @locationid AND dayid = @dayid;";
using var cmd = new NpgsqlCommand(sql, con);
cmd.Parameters.AddWithValue("locationid", Locationid);
cmd.Parameters.AddWithValue("dayid", convdayid);
cmd.Prepare();
cmd.ExecuteNonQuery();
}
解决方案
它试图将'@'解析为'=@'
DELETE FROM reservation WHERE locationid = @Locationid AND dayid = @convdayid;
从字面上看是被传递给数据库。您需要构建该字符串,以便相应地填充 @LocationID 和 @convdaid。就像是:
DELETE FROM reservation WHERE locationid = 34 AND dayid = 55;
推荐阅读
- xaml - AvaloniaUI 样式 - 伪类
- maven - Jenkins 使用 Deploy to Container 插件部署到 JBoss EAP7
- docker - 当 dockerfile 在项目内的文件夹中并且解决方案包含多个项目时运行 docker
- php - 使用 CakePHP 4 发送电子邮件
- notepad++ - 删除记事本++中两个字符之间的单个空格
- cplex - 有人在 OPL 中使用过 Ford Fulkerson 算法吗?
- c# - 如果身份服务器发现文档无法访问,则处理错误
- asp.net-core - endpoints.MapFallbackToFile("index.html") 弄乱了 asp.net 核心项目中的路由
- python - 将火花流写入 Mongodb 接收器的问题
- python - Tkinter 按钮中的命令是否存储在按钮中?