【问题标题】:SQL update in C# shows no errors but doesn't update aswell [duplicate]C# 中的 SQL 更新没有显示错误,但也没有更新 [重复]
【发布时间】:2021-07-28 19:49:37
【问题描述】:

这是一个简单的 2 个整数的减法。 SQL 语句有效,但数据库中的值没有更新。这是下面的代码。

var rest = antrag.Urlauber.RestUrlaub - antrag.Tage;
var sqlcom = "UPDATE Person SET RestUrlaub = " + rest +" WHERE ID = " + id +"";
db.Database.ExecuteSqlCommand(sqlcom);

有人知道问题可能是什么吗?

【问题讨论】:

标签: c# sql sql-update


【解决方案1】:

db.Database.ExecuteSqlCommand 返回一个整数,您应该尝试打印它以查看它返回的内容,执行此查询可能会出错:https://docs.microsoft.com/en-us/dotnet/api/system.data.entity.database.executesqlcommand?view=entity-framework-6.2.0

【讨论】:

    【解决方案2】:

    查询看起来没问题。

    问题可能出在您的“身份”上

    在您的数据库上手动执行查询并查看它是否更新。如果 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);
    

    【讨论】:

    • @Sangeethnadakumar 我已经手动测试了查询并且它有效 UPDATE Person SET RestUrlaub = 3 WHERE ID = 4
    • 您可以尝试运行 SQL 分析器来确定来自您的 C# 代码的查询是否到达您的 SQL 服务器
    • 我查过了!它到达探查器并显示此 UPDATE Person SET RestUrlaub = '3' WHERE ID = 33。难怪它不更新 ID 33 不存在。这有帮助吗?
    • 现在问题出在您的程序逻辑中。检查“id”变量的填充方式。该问题未解释或演示如何填充 id 变量
    • 是的。我发誓这可能是获取 id 的逻辑问题。这个答案解释得对。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2013-03-06
    • 2021-01-27
    相关资源
    最近更新 更多