Как вставить несколько строк одновременно из vb.net или c # в SQL Server? - PullRequest
0 голосов
/ 16 мая 2018

У меня есть объект списка типа my class (Employee), и он содержит около 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

Теперь я хочу вставить все элементыкак отдельные строки в моей БД с помощью хранимой процедуры.

Я не хочу нажимать на БД для каждого элемента.

Мой входной параметр для 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.Но он не сохраняется в базе данных.

Чего здесь не хватает?Правильный ли этот подход?Есть ли лучший способ?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

До End Using вам необходимо завершить транзакцию, чтобы применить изменения:

scope.Complete()
0 голосов
/ 16 мая 2018

Почему бы вам не использовать табличный параметр, который доступен в SQL Server 2008.

...