You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现数据库更新功能时触发Invalid column name 'Id'错误的问题求助

排查"Invalid column name 'Id'"错误的解决方案

首先,我们先定位问题核心:你收到的错误提示是找不到Id列,但你贴出的Uredi函数里的UPDATE语句根本没有用到Id这个列——所以错误不是来自更新操作,而是来自你调用的ZahtjeviRepository.GetZahtjevi方法。

核心排查步骤

  • 检查GetZahtjevi方法的实现:打开这个方法的代码,看看它的SQL查询语句是不是误用了Id作为列名,而你的数据库表Zahtjev_za_nabavu里实际用来标识主键的列是ID_zahtjeva。比如这个方法里可能写了类似这样的错误SQL:
    // 错误示例:用了Id而不是ID_zahtjeva
    string sql = $"SELECT * FROM Zahtjev_za_nabavu WHERE Id = {id}";
    
    把这里的Id改成ID_zahtjeva就能解决这个列名错误。

额外的重要优化建议

你当前用字符串拼接生成SQL的写法存在严重的SQL注入风险,比如如果用户输入的文本里包含单引号(比如O'Neil),会直接破坏你的SQL语句,恶意用户甚至可以用这个漏洞篡改或删除你的数据库数据。建议改用参数化查询重构你的Uredi函数:

internal static void Uredi(Zahtjev odabraniZapis) 
{
    DB.OpenConnection();
    string sql = @"UPDATE Zahtjev_za_nabavu 
                   SET Ponuda = @Ponuda, 
                       Opis_predmeta = @Opis_predmeta, 
                       Cijena = @Cijena, 
                       ID_zaposlenika = @ID_zaposlenika 
                   WHERE ID_zahtjeva = @ID_zahtjeva;";
    
    // 假设你的DB类使用SqlConnection/SqlCommand,可根据实际数据库操作类调整写法
    using (var cmd = new SqlCommand(sql, DB.Connection))
    {
        cmd.Parameters.AddWithValue("@Ponuda", odabraniZapis.Ponuda);
        cmd.Parameters.AddWithValue("@Opis_predmeta", odabraniZapis.Opis_predmeta);
        cmd.Parameters.AddWithValue("@Cijena", odabraniZapis.Cijena);
        cmd.Parameters.AddWithValue("@ID_zaposlenika", odabraniZapis.ID_zaposlenika);
        cmd.Parameters.AddWithValue("@ID_zahtjeva", odabraniZapis.ID_zahtjeva);
        cmd.ExecuteNonQuery();
    }
    DB.CloseConnection();
}

同样,GetZahtjevi和Kreiraj方法也应该改用参数化查询,避免同类问题和安全风险。

内容的提问来源于stack exchange,提问作者Zoof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:42:36