c# - C# 中的 SQL 更新没有显示错误,但也没有更新
问题描述
这是2个整数的简单减法。SQL 语句有效,但数据库中的值没有更新。这是下面的代码。
var rest = antrag.Urlauber.RestUrlaub - antrag.Tage;
var sqlcom = "UPDATE Person SET RestUrlaub = " + rest +" WHERE ID = " + id +"";
db.Database.ExecuteSqlCommand(sqlcom);
任何人都知道问题可能是什么?
解决方案
查询看起来没问题。
问题可能出在您的“身份”上
在您的数据库上手动执行查询并查看它是否更新。如果 id 错误,则查询返回成功而不更新任何内容。
建议 - 使用这样的查询很容易出现 SQL 注入等非常大的安全漏洞。考虑使用像 EntityFramework 这样的 ORM 或将查询参数作为 ADO 参数传递,而不是直接在查询中拼接
可选地,如果您不喜欢使用像 EntityFrameworks 这样的大型 ORM,我创建了一个简单的基于 dapper 的库,您可以考虑在 1 或 2 行中安全地运行查询。
如何使用:https ://github.com/sangeethnandakumar/Express-Data-Library
安装
Install-Package Twileloop.ExpressData -Version 1.0.0
安全运行参数化查询以防止 SQL 注入
var sql2 = $ "SELECT * FROM tblUser WHERE Id=@id AND Fname=@fname";
result = SqlHelper.QuerySafe<TblUser>(sql2,
new
{
id = 1,
fname = "Sangeeth"
},
_connectionString);
推荐阅读
- android - Kotlin File.copyTo 抛出 FileAlreadyExistsException,覆盖设置为 true
- excel - 如何过滤或修改单元格以仅将文本保留在语音标记内
- laravel-5.8 - 图片上传上传后Laravel 刀片模板未加载图片(无法加载资源状态 404)
- javascript - 如何使用 .filter() 按对象中的对象进行过滤?
- python - 如何在kmeans中为每个集群制作词云
- ninja - 额外详细的忍者调试输出
- html - 如何使用 VBA 提取 HTML 源代码?
- r - R - 使用 ggplot2 循环,按列名存储图
- javascript - 在 deck.gl 地图中动态更新 Geojson 图层
- javascript - ajax 中的函数在解析为 1 或 2 之类的数字时起作用,但是当我使用变量解析时不起作用