【发布时间】:2017-08-21 15:49:22
【问题描述】:
如果我想将多个对象插入 SQL Server 数据库,我似乎必须这样做:
using (var command = new SqlCommand(@"INSERT INTO Table1 (
Param_1,
Param_2,
Param_3,
...
)
VALUES (
@param1,
@param2,
@param3,
...
)",conn))
{
command.Params.Add("@param1",...);
command.Params.Add("@param2",...);
command.Params.Add("@param3",...);
...
foreach(var o in objects)
{
command.Params["@param1"].Value = o.Param1;
command.Params["@param2"].Value = o.Param2;
command.Params["@param3"].Value = o.Param3;
...
command.ExecuteNonQuery();
}
}
仅仅把这些放在一起就让我大吃一惊,我有一张有 28 个字段的表格。我必须分 4 次写出那个长长的列表,只有最微不足道的区别(数据库字段名称可能使用不同的命名约定)。看起来很疯狂;有没有更短的方法?
Entity Framework 对我来说不是一个选项,这本来是我的第一选择,我必须滚动代码。
【问题讨论】:
-
你能用Dapper吗?
-
使用 ORM 或至少有参数名称列表并以编程方式创建命令和参数。
-
@MarkC。这有什么帮助?然后我的存储过程也有28个参数!
-
如果要插入大量行,请结合使用 SqlBulkCopy 和 DataTable 或 DbDataReader。您可以使用 MoreLINQ 的
ToDataTable()等扩展方法轻松地将集合转换为数据表。 SqlBulkCopy 的性能类似于 BULK INSERT -
您还可以使用Table-Valued Parameters 并将多个项目作为单个表类型参数传递给存储过程或脚本。
标签: c# .net sql-server .net-4.5 sqlconnection