【问题标题】:How to insert multiple rows at a time from vb.net or c# into SQL Server?如何从 vb.net 或 c# 一次将多行插入 SQL Server?
【发布时间】:2018-10-25 23:25:50
【问题描述】:

我有我的类(员工)类型的列表对象,它有大约 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。但它没有保存到数据库中。

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

【问题讨论】:

  • @SamAxe 我如何从 C# 或 vb.net 中做到这一点是我的问题。
  • @SamAxe 没有阅读问题,请不要编辑标签。我需要在 c# 或 vb.net 中回答。所以我也标记了 c#。
  • 由于您的代码是在 VB 中,只使用 C# 的人可能不会喜欢它。添加 [.net] 标签可能会更好。另外,请正确缩进您的代码。
  • 关于您的问题: 1)您是否检查过 SamAxe 提到的链接中的答案? 2) 请注意,您的代码会覆盖 for 循环内每次迭代中的参数值。

标签: .net sql-server vb.net stored-procedures executenonquery


【解决方案1】:

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

【讨论】:

【解决方案2】:

End Using 之前,您需要完成交易以应用更改:

scope.Complete()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 2010-12-04
    相关资源
    最近更新 更多