没有" foreach"可以执行此操作。 ???
我会理解是否有库函数将参数与数据列表相关联并执行N一起插入
String SQL_DETAIL = "INSERT INTO [ImportDetail] " +
" ([idMaster] " +
" ,[operation] " +
" ,[data]) " +
" VALUES " +
" (@a,@b,@c) ";
foreach (ImportDetail imp in this.lstImportDetail )
{
SqlCommand dettCommand = new SqlCommand(SQL_DETAIL, myTrans.Connection);
dettCommand.Transaction = myTrans;
dettCommand.Parameters.Add("a", SqlDbType.Int).Value = imp.IdMaster;
dettCommand.Parameters.Add("b", SqlDbType.NVarChar).Value = imp.Operation;
dettCommand.Parameters.Add("c", SqlDbType.NVarChar).Value = imp.Data;
i =i+ (int)dettCommand.ExecuteNonQuery();
}
感谢您的帮助
答案 0 :(得分:1)
如果您感觉活泼,可以创建用户定义的表格类型,并将所有ImportDetail
个对象的数据放入DataTable
。但这并不能完全减轻对循环的需求 - 它只是使它更有效率,因为你只是在内存中转换数据而不是将它传递给远程数据库。填充DataTable
以匹配表类型的架构后,可以将其作为参数传递给存储过程以处理INSERT
。如果您愿意,可以将该过程设置为事务性的,并且由于您的输入数据已经在表(各种)中,因此存储过程的SQL也应该非常简单。
有关用户定义的表类型及其在.NET中的使用方式的更多信息,请查看以下链接:http://msdn.microsoft.com/en-us/library/bb675163.aspx
更进一步,如果这是你必须经常做的事情,那么在IEnumerable
上把它变成某种扩展方法以保持干燥的可能性并没有超出范围
这是您正在寻找的那种解决方案吗?考虑到问题的措辞,我有点难以说出来。
答案 1 :(得分:1)
您可以定义两个数组列表: 第一个将具有参数的名称,第二个将具有其值:
ArrayList arrayName = new ArrayList { };
ArrayList arrayValue = new ArrayList { };
arrayName.Add("@Parameter1");
arrayName.Add("@Parameter2");
arrayValue.Add(value1);
arrayValue.Add(value2);
for (int i = 0; i < arrayName.Count; i++)
{
cmd.Parameters.AddWithValue(arrayName[i].ToString(), arrayValue[i]);
}
然后执行命令