【问题标题】:Parameter Placeholders are causing an error in Webmatrix参数占位符导致 Webmatrix 出现错误
【发布时间】:2016-02-08 20:00:16
【问题描述】:

每次我尝试在 WebMatrix 中的 SELECT、INSERT 或 UPDATE 语句中使用参数占位符时,都会遇到相同的错误。它在 WHERE 子句中运行良好。我做错了什么我需要一些帮助。

这是我的代码:

  if (IsPost && Validation.IsValid())
        {  
           Admission1 = Request["AdmDate1"];
           Discharge1 = Request["DisDate1"];
           LOC1 = Request["LOC1"];
           Program1 = Request["ProgramName1"];
           Notes = Request["Notes"];           
           var SQLUPDATE = "UPDATE SSI_Screening_New SET AdmissionDate1=@49, DischargeDate1=@50,  LOC1=@51, ProgramName1=@52, Notes1=@53 WHERE (ID) = (@0)";  
           db.Execute(SQLUPDATE, Admission1, Discharge1, LOC1, Program1, Notes, SSId);

           if (ModelState.IsValid) 
           {     
              Response.Redirect("~/ThankYou");
           }             
        }

是否有在 Webmatrix 中使用参数占位符的替代方法?

这是我每次遇到的错误:

异常详细信息:System.Data.SqlClient.SqlException:必须声明标量变量“@49”。

提前感谢您的帮助!

【问题讨论】:

    标签: parameters webmatrix webmatrix-2 webmatrix-3


    【解决方案1】:

    您在正确的轨道上,但您的参数占位符必须从@0 开始,然后是@1、@2、@3...等等。你不能跳转到@49,这就是为什么它说你必须声明那个变量。尝试使用@0 到@5,它会起作用。

               var SQLUPDATE = "UPDATE SSI_Screening_New SET AdmissionDate1=@0, DischargeDate1=@1,  LOC1=@2, ProgramName1=@3, Notes1=@4 WHERE (ID) = (@5)";  
    

    【讨论】:

    • 因为不想其他领域,有没有别的办法?
    • 不行,没有别的办法。在执行任何类型的参数化查询时,您必须从@0、@1 等开始。做其他事情没有任何优势。每个数据库查询或执行都有自己的参数列表,因此您不能或不应该以任何方式重用它们。我编辑了我的答案以显示正确的方式。
    • 这是否意味着我必须为记录中的每个字段创建参数并且我不想更新每个字段?我只有几个要更新的字段。
    • @ 约定只是对传递给 db.query 或 db.execute 的所有参数进行编号。因此,如果您只更新 3 个字段,那么您将只有 @0、@1、@2 和一个 @3 来指示 SSid。 @号与记录中的字段个数完全无关。
    • 谢谢。我要再试一次。
    猜你喜欢
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 2020-04-17
    • 2013-02-05
    • 1970-01-01
    相关资源
    最近更新 更多