在一个后台编码中我是这样循环的,我给出的这两段代码不在同一个文件里: Dim i As Integer
Dim strSQL As String
Dim parameters() As SqlParameter = {New SqlParameter("@Deptno", SqlDbType.VarChar, 50), _
New SqlParameter("@AssetNumber", SqlDbType.VarChar, 50), _
New SqlParameter("@UserName", SqlDbType.VarChar, 50), _
New SqlParameter("@Sequence", SqlDbType.VarChar, 50)} '把出库的固定资产写入数据库
If Not dtOutTemp Is Nothing Then
If dtOutTemp.Rows.Count > 0 Then
'改写z_stock_detail表和z_stock表
For Each objRow In dtOutTemp.Rows
parameters(0).Value = objRow.Item("部门号")
parameters(1).Value = objRow.Item("资产编号")
parameters(2).Value = objRow.Item("使用人")
parameters(3).Value = objRow.Item("序列号")
i = objData.RunProcedure("Out_Computer", parameters)
Next
End If
End If
Dim strSQL As String
Dim parameters() As SqlParameter = {New SqlParameter("@Deptno", SqlDbType.VarChar, 50), _
New SqlParameter("@AssetNumber", SqlDbType.VarChar, 50), _
New SqlParameter("@UserName", SqlDbType.VarChar, 50), _
New SqlParameter("@Sequence", SqlDbType.VarChar, 50)} '把出库的固定资产写入数据库
If Not dtOutTemp Is Nothing Then
If dtOutTemp.Rows.Count > 0 Then
'改写z_stock_detail表和z_stock表
For Each objRow In dtOutTemp.Rows
parameters(0).Value = objRow.Item("部门号")
parameters(1).Value = objRow.Item("资产编号")
parameters(2).Value = objRow.Item("使用人")
parameters(3).Value = objRow.Item("序列号")
i = objData.RunProcedure("Out_Computer", parameters)
Next
End If
End If
objCom.Parameters.Add(parameter)
Next======>Dim aParams As SqlParameter()
aParams = Array.CreateInstance(GetType(SqlParameter), parameters.Count)
parameters.CopyTo(aParams, 0)For Each parameter In aParams
objCom.Parameters.Add(parameter)
Next
aParams = CType(Array.CreateInstance(GetType(SqlParameter), parameters.Length), SqlParameter())
parameters.CopyTo(aParams, 0) For Each parameter In aParams
objCom.Parameters.Add(parameter)
Next
还是报同样的错误:另一个 SqlParameterCollection 已包含带有 ParameterName“@Deptno”的 SqlParameter。我现在很奇怪,是不是objCom没有释放?但是objCom超出过程时就应该是nothing了。我用断点跟踪,奇怪的是它只执行第一遍,第二遍就出错。我的存储过程如下:
(
@Deptno varchar(50),
@UserName varchar(50),
@Sequence varchar(50),
@AssetNumber varchar(50)
)AS
DECLARE @ProductId varchar
BEGIN TRANSACTION
UPDATE z_stock_detail SET dept_no = @Deptno, user_name = @UserName, sequence = @Sequence, assign_date=GETDATE(),flag='1'
WHERE dept_no = '00' AND asset_number = @AssetNumber
IF @@ERROR = 0
UPDATE z_stock SET quantity = quantity - 1
WHERE dept_no = '00' AND product_id = LEFT(@AssetNumber, 10)
IF @@ERROR = 0
SELECT @ProductId=product_id FROM z_stock WHERE product_id=LEFT(@AssetNumber, 10) AND dept_no=@Deptno
IF @ProductId IS NULL
INSERT INTO z_stock VALUES (Left(@AssetNumber, 10) ,@Deptno,1)
ELSE
UPDATE z_stock SET quantity=quantity+1 WHERE dept_no=@Deptno AND product_id=Left(@AssetNumber, 10)
IF @@ERROR = 0
COMMIT
ELSE
ROLLBACK
RETURN
GO
用oledbcommand的话是:
olecommand1.Parameters.clear();
因为每次循环你都新增了同一个参数
谢谢你!问题解决了。但我很奇怪的是我是这样引用的 ByVal parameters() As IDataParameter 。parameters一传出调用他的过程不是释放掉了吗?