You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6中ExecuteSqlRawAsync执行含JSON的SQL报格式错误如何解决

问题根因

ExecuteSqlRawAsync 会把传入的第一个字符串按C#复合格式规则解析,将{数字}格式的片段识别为参数占位符,匹配方法后续传入的参数列表。你SQL中的JSON片段包含大量{、}字符,会被误识别为占位符标记,因无对应参数传入,最终抛出格式错误异常。

可用修复方案

任选一种即可:

  • 转义大括号:按照C#复合格式转义规则,把脚本内所有单个{替换为{{、单个}替换为}},即可被正常解析。缺点是JSON内容多的时候替换成本高,后续维护脚本麻烦。
  • 把脚本作为参数传入:不要直接把脚本作为格式化串传入,将整段脚本作为索引0的参数传递,彻底避免解析脚本内部的大括号,改动最小:
    await context.Database.ExecuteSqlRawAsync("{0}", script);
    
  • 用原生ADO.NET执行(推荐批量脚本场景使用):绕开EF Core的SQL格式化逻辑,直接调用底层数据库连接的命令执行接口,对原生SQL兼容性最好,不会出现格式解析问题:
    var conn = context.Database.GetDbConnection();
    await conn.OpenAsync();
    using var cmd = conn.CreateCommand();
    cmd.CommandText = script;
    await cmd.ExecuteNonQueryAsync();
    
    注意:如果你的SQL脚本里包含SSMS生成的GO分隔符,需要先按GO拆分语句分段执行,你给出的示例脚本无GO,可直接执行。

内容的提问来源于stack exchange,提问作者irfanmcsd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 06:57:28