此 INSERT 语句在 SSMS 中运行时工作正常:
INSERT INTO GenInfo
(ParameterKey, Value, Description, Secured, BranchID, GroupID)
SELECT
'companyURLStem', 'http://dev-sql2019all/company/rdPage.aspx?rdSecureKey={0}',
'Main URL to access company reports', -1, BranchID, 4
FROM Branch
但是,当我尝试使用 EF 在 C# 中将其作为字符串执行时,如下所示:
dbServices.ApplyChangeToTarget(sql);
我收到此错误:
索引(从零开始)必须大于或等于零且小于参数列表的大小
罪魁祸首是字符串中的
{0}
。如何避免这个错误?
我这样做是作为从源数据库到目标的编程数据迁移的一部分,因此我没有太多灵活性来进行自定义工作。我本以为该字符串的执行方式与 SSMS 中的执行方式完全相同。
有什么想法吗?
谢谢
卡尔
解决方案如下:
foreach (var item in newItems)
{
**item.Value = item.Value.Replace("{", "{{");
item.Value = item.Value.Replace("}", "}}");**
string sql = @$"INSERT INTO GenInfo
(ParameterKey, Value, Description, Secured, BranchID, GroupID)
SELECT '{item.ParameterKey}', '{item.Value}', '{item.Description}', {item.Secured}, BranchID, {item.GroupID}
FROM Branch";
dbServices.ApplyChangeToTarget(sql);
}