ExecuteSqlCommand在@p0附近抛出不正确的语法,但在ssms中它执行成功



我编写了一个插入多行的SQL命令。在这里生成的格式化表字符串,如果将其复制/粘贴到SSMS并运行,则会成功执行,但在ExecuteSqlCommand方法内部,它会抛出异常:

App.Api.dll中发生类型为"System.Data.SqlClient.SqlException"的异常,但未在用户代码中处理。"@p0"附近的语法不正确

通常告诉脚本有问题,但事实并非如此。也许有人知道问题出在哪里?

var elements = new List<Discount>();
for (int j = 0; j < 10; j++)
{
elements.Add(new Discount
{
Id = Guid.NewGuid(),
SomeField0 = $"D- {i}",
SomeField1 = i,
SomeField2 = i / 100
});
}
string values = String.Join(", ", elements.Select(item => $"('{item .Id}', 
'{item.SomeField0}', {item.SomeField1}, {item .SomeField2})"));
FormattableString formString = $"INSERT INTO [dbo].TableName Values {values}";
context.Database.ExecuteSqlCommand(formString);

FormattableString值:

{
INSERT INTO [dbo].SomeTable Values
('852106e6-33e7-4f82-b00d-5c6e662d3c91', 'Acc - 0', 0, 0),
('68d5720a-4db8-437d-babb-d9e408548699', 'Acc - 0', 0, 0),
('fa2fc7ff-f355-4df5-928b-b3e8a77d1341', 'Acc - 0', 0, 0),
('503bc3ff-fb1f-4203-b098-d981093d2b5d', 'Acc - 0', 0, 0),
('0c5b61f6-1f93-4a40-8c1e-48194f8e8ca1', 'Acc - 0', 0, 0),
('02d9558c-623b-4bd7-86c5-12e3202fcdf6', 'Acc - 0', 0, 0),
('883bbdf2-dc15-41b0-9a39-5af9d56e15f2', 'Acc - 0', 0, 0),
('900d0beb-cc9b-4ff6-a74c-742a032ee9e1', 'Acc - 0', 0, 0),
('ceb5eb75-694b-44da-bf3a-cd2fd8741308', 'Acc - 0', 0, 0),
('eb39a23b-2f32-4628-a111-68630291fd00', 'Acc - 0', 0, 0)
}

已解决。问题出现在FormattableString中。使用RawSqlString代替它:

var script = new RawSqlString($"INSERT INTO [dbo].Table VALUES {values}");

最新更新