实现数据库更新功能时触发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
相关产品推荐
相关产品推荐

