【问题标题】:Unexplained exception from SQL command来自 SQL 命令的无法解释的异常
【发布时间】:2017-05-22 07:15:54
【问题描述】:

我有一个在 IIS 下运行的 REST Web 服务,并且收到了一个从特定 SQL 命令引发的奇怪异常。

查询

insert into locations (lat, lon, dt, owner) 
values ('30', '-5', '20170107 16:40:17', 1)

工作正常,但是这个

update locations 
set dt = '20170107 16:37:18' 
where id = 12817

总是抛出异常

索引(从零开始)必须大于或等于零且小于参数列表的大小。

id 是主键。两个命令都使用相同的代码结构发送:

query = string.Format(result = string.Format("Time updated for {0} at {2}", loc.Owner, DateTime.Now););

try
{
    using (System.Data.SqlClient.SqlCommand command = new SqlCommand(query, mapConnection))
    {
        successRows = command.ExecuteNonQuery();
    }
    .....
}
catch (Exception ex)
{
    ....
}
finally
{
    ....
    mapConnection.Close(); 
}

如果我使用 SQL Server 企业管理器将相同的命令直接发送到服务器,则该命令会按预期完成而不会出现错误。那么asp.net在抱怨什么?

【问题讨论】:

  • 您是否进行了调试以找到引发错误的位置?
  • 让我看看query = string.Format中的代码
  • 你的 string.format 是问题所在。您能分享一下您是如何构建 INSERT 和 UPDATE 查询的吗?
  • 我已经添加了字符串格式的代码。但这并不是我想的那个例外,它只是在之后。我有“if (successRows == 1) result = string.Format("Time updated for {0} at {2}", loc.Owner, DateTime.Now);" - 这就是那里的错误。解决了 - 谢谢@Carcigenicate

标签: c# asp.net sql-server


【解决方案1】:

查看您的 string.format。您没有传递足够的项目:

string.Format("Time updated for {0} at {2}", loc.Owner, DateTime.Now)

您有 {0} 和 {2} 的职位。您没有列出 {1},但它是隐含的。因此,现在格式需要传入 3 个项目,而您只传入两个。将格式更改为:

string.Format("Time updated for {0} at {1}", loc.Owner, DateTime.Now)

【讨论】:

  • 是的,谢谢,但正如我在上面的评论中所说,我在@Carcigenicate 建议检查引发异常的位置后发现了错误。抱歉,我没有在回复中明确地进行更正。
猜你喜欢
  • 2016-07-13
  • 2014-10-25
  • 2021-03-02
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多