【发布时间】: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