编辑请注意,该语句不是单个插入。它使用foreach
块插入多个值数组。
StringBuilder sbSQL =
new StringBuilder(
"INSERT INTO [table] ([fk_id], [Description], [Title] ) VALUES");
foreach(var item in items) {
sbSQL.AppendFormat("({0},'{1}','{2}'),",
item.fk_id, item.description, item.title)
}
myDataContext.ExecuteCommand(sbSQL.Remove(sbSQL.Length - 1, 1).ToString());
myDataContext.SubmitChanges();
我真的很想使用这种方法,因为它加速了数据库插入2次。但是我不知道该如何对它进行参数化。
最佳答案
我开始写评论,但这太长了。
LINQ-to-SQL中的参数化查询适合您。像这样:
StringBuilder sbSQL = new StringBuilder(
"INSERT INTO [table] ([fk_id], [Description], [Title] ) VALUES");
int paramNum = 0;
List<object> paramValues = new List<object>();
foreach(var item in items)
{
sbSQL.AppendFormat("({{{0}}},{{{1}}},{{{2}}}),",
paramNum,
paramNum + 1,
paramNum + 2);
paramValues.Add(item.fk_id);
paramValues.Add(item.description);
paramValues.Add(item.title);
paramNum += 3;
}
myDataContext.ExecuteCommand(
sbSQL.Remove(sbSQL.Length - 1, 1).ToString(),
paramValues.ToArray());
ExecuteCommand
函数只接受您的SQL命令,并带有与标准.NET字符串格式函数兼容的令牌({0}
),然后将您传递的值转换为参数,并使用其生成的参数名称代替令牌。您可以根据自己的喜好编写命令并排列参数。它不会检查或解析命令。关于c# - 如何正确清理(或参数化)SQL压缩插入语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4864227/