如何将数组数据绑定到 SqlCommand.Parameter
本文关键字:SqlCommand Parameter 数据绑定 数组 | 更新日期: 2023-09-27 18:30:17
可以在
没有"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();
}
感谢您的帮助
如果您感觉很轻浮,可以创建一个用户定义的表类型,并将所有ImportDetail
对象中的数据放入DataTable
中。不过,这并不能完全减轻对循环的需求 - 它只是使其更有效率,因为您只是在内存中转换数据,而不是将其传递给远程数据库。填充DataTable
以匹配表类型的架构后,可以将其作为参数传递给存储过程以处理INSERT
。如果您愿意,该过程可以成为事务性的,并且由于您的输入数据已经位于表(各种)中,因此存储过程的 SQL 也应该非常简单。
有关用户定义的表类型及其在 .NET 中的使用方式的详细信息,请查看此链接:http://msdn.microsoft.com/en-us/library/bb675163.aspx
更进一步,如果这是您必须经常做的事情,那么将其转换为某种扩展方法以保持干燥IEnumerable
并非不可能。
这是您正在寻找的解决方案吗?鉴于问题的措辞,我有点难以分辨。
您可以定义两个数组列表:第一个将具有参数的名称,第二个将具有其值:
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]);
}
然后执行命令