在一个后台编码中我是这样循环的,我给出的这两段代码不在同一个文件里:        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

解决方案 »

  1.   

    它提示:另一个 SqlParameterCollection 已包含带有 ParameterName“@Deptno”的 SqlParameter。
      

  2.   

    Public Function RunProcedure 在我定义的一个类中,我在后台编码文件中实例化了一个对象objData,通过这个对象调用RunProcedure
      

  3.   

    changeFor Each parameter In parameters
        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
      

  4.   

    to saucer:我把代码改成这样Dim aParams As SqlParameter()
                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了。我用断点跟踪,奇怪的是它只执行第一遍,第二遍就出错。我的存储过程如下:
      

  5.   

    CREATE PROCEDURE dbo.Out_Computer
    (
    @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
      

  6.   

    每一个循环你都要把SqlCommand()的参数清空
    用oledbcommand的话是:
    olecommand1.Parameters.clear();
    因为每次循环你都新增了同一个参数
      

  7.   

    to xyxym:
      谢谢你!问题解决了。但我很奇怪的是我是这样引用的 ByVal parameters() As IDataParameter 。parameters一传出调用他的过程不是释放掉了吗?