为什么我的 MVC 5 ActionResult 中的 C# 循环会抛出此错误消息

问题描述 投票:0回答:1

代码:

int total = Convert.ToInt32(form["REC-tr-total"]); 
int value = 0;
string insValOutput = ""; 

if (total > 0)
{
  for (int i = 1; i <= total; i++) 
  {
    value = Convert.ToInt32(form["inventoryID[" + i + "]"]); 
    insValOutput = $"(" + vCAS_capture_payments.Id + ", value{i + 1}),"; 
  }

db.Database.ExecuteSqlCommand(String.Format(@"INSERT INTO dbo.VCAS_capture_payments__REF_items (FK_capture_paymentsId, FK_inventoryId)                 VALUES {0};", insValOutput));             
}

错误信息: enter image description here

这似乎是一个非常简单的循环,但错误不断出现......专家请指教。

更新:

对于那些询问的人,我已更新此行如下:

insValOutput = String.Format(@"({0},{1}),", vCAS_capture_payments.Id, value);  // (1, value1),(2, value2) ...

但结果相同

c# asp.net-mvc-5
1个回答
0
投票

看起来您正在尝试构建传递给插入语句的值列表。 您希望结果为 Values (itemA1, itemA2), (itemB2, itemB2), ... 如果这是不正确的,则答案的其余部分可能不相关。

错误出现在构建此集合的行中:

insValOutput = $"(" + vCAS_capture_payments.Id + ", value{i + 1}),";

您在构建值集合的条件中存在一些问题......

第一个问题是你只会有 1 个(itema、itemb)集合,因为你没有附加到 insValOutput 变量。 实际上,每次执行循环时都会覆盖它。

第二个是,一旦清除“{”的错误,您将收到逗号错误,因为您在文本末尾添加了逗号,而最后一个元素需要省略逗号。

第三个是您现在收到的具体错误。

insValOutput = $"(" + vCAS_capture_payments.Id + ", value{i + 1}),";

当前,您实际上将字符串“value{i + 1}”放入 insValOutput 中,错误表明大括号语法不正确。

我想你正在寻找的是这个:

$"({vCAS_capture_payments.Id}, value{i + 1}),"

但即使纠正了这一点,您仍然会遇到上述问题。

您应该重新审视如何构建此 Values 集合,然后您应该捕获您传递的整个语句,以便双方都可以校对它,然后在 SMS 会话中执行它以检查错误。

正如其他人所指出的,这也不是在应用程序中构建查询的好方法。 您绝对应该考虑重构您的代码以及它如何构建查询。

© www.soinside.com 2019 - 2024. All rights reserved.