如何将vb.net或c#中的多行同时插入SQL Server?
我有一个类型为my class(Employee)的list对象,它大约有3项 比如说:如何将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
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#执行此操作?有什么例子吗?我给你举个例子