首页 > 解决方案 > 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();

        }

标签: c#asp.netpostgresqlformsrazor

解决方案


它试图将'@'解析为'=@'

DELETE FROM reservation WHERE locationid = @Locationid AND dayid = @convdayid;

从字面上看是被传递给数据库。您需要构建该字符串,以便相应地填充 @LocationID 和 @convdaid。就像是:

DELETE FROM reservation WHERE locationid = 34 AND dayid = 55;

推荐阅读