如何将vb.net或c#中的多行同时插入SQL Server?

如何将vb.net或c#中的多行同时插入SQL Server?,.net,sql-server,vb.net,stored-procedures,executenonquery,.net,Sql Server,Vb.net,Stored Procedures,Executenonquery,我有一个类型为my class(Employee)的list对象,它大约有3项 比如说: empObj.Id = 3, empObj.Name = abc, emp.Value = Yes empObj.Id = 4, empObj.Name = xyz, emp.Value = No empObj.Id = 5, empObj.Name = pqr, emp.Value = Yes 现在,我想使用存储过程将所有项目作为单独的行插入数据库 我不想对每一项都使用DB 我的数据层中SaveMeth

我有一个类型为my class(Employee)的list对象,它大约有3项

比如说:

empObj.Id = 3, empObj.Name = abc, emp.Value = Yes
empObj.Id = 4, empObj.Name = xyz, emp.Value = No
empObj.Id = 5, empObj.Name = pqr, emp.Value = Yes
现在,我想使用存储过程将所有项目作为单独的行插入数据库

我不想对每一项都使用DB

我的数据层中
SaveMethod
的输入参数将是上面的列表对象,我的方法如下:

Public Overridable Function SaveMethod(businessEntity As List(Of Employee)) As Boolean
    Using scope As System.Transactions.TransactionScope = New System.Transactions.TransactionScope()
        'DECLARE CONNECTION VARIABLE
        Dim objSqlConn As SqlConnection = Nothing
        'DECLARE SQL PARAMS VARIABLE
        Dim objSqlParams As SqlParameter() = Nothing
        'DECLARE BOOLEAN VARIABLE
        Dim bolReturnValue As Boolean = False
        'SET THE CONNECTION
        objSqlConn = GetCSSConnection()
        'SET THE PARAMETERS TO THE STORED PROCEDURE
        objSqlParams = New SqlParameter(3) {}
        For i As Integer = 0 To businessEntity.Count - 1
            objSqlParams(0) = New SqlParameter("@myParam1", SqlDbType.Int)
            objSqlParams(0).Value = 2 ' businessEntity(i).Id

            objSqlParams(1) = New SqlParameter("@myParam2", SqlDbType.Int)
            objSqlParams(1).Value = businessEntity(i).Name

            objSqlParams(2) = New SqlParameter("@myParam3", SqlDbType.Bit)
            objSqlParams(2).Value = businessEntity(i).value
        Next

        'BUILD NEW SQL CONNECTION AND EXECUTE THE STORED PROCEDURE
        'ASSIGN THE RESULT TO BOOLEAN VARIABLE
        bolReturnValue = (Microsoft.VisualBasic.IIf(ExecuteNonQuery(objSqlConn, CommandType.StoredProcedure, "myStoredProcedure", objSqlParams) > 0, True, False))

        CloseConnection(objSqlConn)
        Return bolReturnValue 'RETURNS BOOLEAN VALUE
    End Using
End Function
它没有抛出任何错误,它也返回True。但它没有保存到数据库中


这里少了什么?这种方法正确吗?有更好的方法吗?

为什么不使用SQL server 2008提供的表值参数呢。

在使用
结束之前,您需要完成事务以应用更改:

scope.Complete()

@SamAxe我的问题是如何从C#或vb.net执行该操作。@SamAxe如果没有阅读以外的问题,请不要编辑标记。我需要c#或vb.net的答案。所以我也给c加了标签。因为你的代码是用VB编写的,c-只有男人才会喜欢。添加[.net]标记可能会更好。此外,请正确缩进您的代码。关于您的问题:1)您是否检查了SamAxe提到的链接中的答案?2) 请注意,您的代码在for循环中的每次迭代中都会覆盖参数值。如何从C#执行此操作?有什么例子吗?我给你举个例子