【问题标题】:Razor SQL - Update statement using variable as column name dynamic statement translationRazor SQL - 使用变量作为列名动态语句翻译的更新语句
【发布时间】:2016-01-25 23:20:51
【问题描述】:

原因是少数用户的内部应用程序,不需要安全性。

我在 SQL 中看到了很多关于该主题的帖子,但我无法在 Razor 中翻译。

我正在尝试在用户选择列的 Razor 中创建更新语句。

如何将其转化为动态语句?像 Exec() 或 sp_executesql

if(IsPost){
    NoEmpl = Request.Form["NoEmpl"];
    NoCam = Request.Form["NoCam"];
    Day = Request.Form["Day"];
    Date = Request.Form["Date"];
    var db = Database.Open("Schedule");
    var insertCommand = "UPDATE AtiTruck SET " + NoCam + "=@0 WHERE Day=@1 AND Date >= @2"; 
    db.Execute(insertCommand, NoEmpl, Day, Date);}

SET NoCam 是通过 NoCam 表单输入选择的...它的值必须使用 NoEmpl (=@0) 表单输入来填充。

谢谢

【问题讨论】:

  • 我不确定您为什么要在 Razor cshtml 页面中进行任何更新...您的所有更新都应该在控制器或数据访问层中完成。这样您就可以验证用户数据以确保有效数据进入数据库。
  • Web 开发规则 1... 永远不要相信来自用户输入的数据。用户可以随时操作数据。
  • 所有受信任的用户...别担心
  • 好吧...那么乍一看你的 SQL 是不正确的。看起来您的 @1 指向 NoEmpl 但在 SQL 中它是“WHERE Day=@1”...我假设 Day 应该指向 @2 而 Date 应该是 @3...您的参数顺序是NoTruck = @0,NoEmpl = @1,Day = @2,Date = @3
  • 是的.. 我试图解释我的需求。我做了这个声明,看起来很接近。 var insertCommand = "UPDATE AtiCamion SET " + NoCam + "=@0 WHERE Day=@1 AND Date >= @2"; db.Execute(insertCommand, NoCam, NoEmpl, Day, Date); 我现在在 db.execute 行中有错误。它说令牌“3279”是错误的。好的是 3279 是“NoCam”变量请求表的结果。但我不知道如何正确创建执行

标签: sql-server asp.net-mvc razor dynamic-sql


【解决方案1】:

我终于想通了,不用 Exec() 或 sp_sp_executesql

var insertCommand = "UPDATE AtiCamion SET " + NoCam + "=@1 WHERE Day=@2 AND Date >= @3"; 
db.Execute(insertCommand, "NoCam", NoEmpl, Day, Date);

我觉得我看得太远了

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多