如何将数组数据绑定到 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();
 }

感谢您的帮助

如何将数组数据绑定到 SqlCommand.Parameter

如果您感觉很轻浮,可以创建一个用户定义的表类型,并将所有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]);
        }

然后执行命令