VB.NET - 清除传递给Oracle存储过程的参数

时间:2017-08-13 17:43:23

标签: vb.net oracle parameters procedure

我有一个子文件,它将文件的内容插入到Oracle DB中。 对于只有一个文件,一切都很好,但对于一个以上的文件,过程的参数保留旧值,但也保留新值;所以不是4个参数,在第2个文件中我有8个参数。

以下是代码示例:

For Each oFile As String In Directory.GetFiles("D:\files")

Dim header() As String = IO.File.ReadAllLines(oFile)
If header(0) = "<delivery_note>" Then

    XML_File = XmlReader.Create(oFile, New XmlReaderSettings())
    DataSet.ReadXml(XML_File)

    For i As Integer = 0 To DataSet.Tables(0).Rows.Count - 1

        cmd.Parameters.Add("p_delnote_id", OracleDbType.Int64).Direction = ParameterDirection.Input
        cmd.Parameters("p_delnote_id").Value = Convert.ToInt32(DataSet.Tables(0).Rows(i).Item(0))

        cmd.Parameters.Add("p_order_id", OracleDbType.Int64).Direction = ParameterDirection.Input
        cmd.Parameters("p_order_id").Value = Convert.ToInt32(DataSet.Tables(0).Rows(i).Item(1))

        cmd.Parameters.Add("p_product_id", OracleDbType.Int64).Direction = ParameterDirection.Input
        cmd.Parameters("p_product_id").Value = Convert.ToInt32(DataSet.Tables(0).Rows(i).Item(2))

        cmd.Parameters.Add("p_quantity", OracleDbType.Int64).Direction = ParameterDirection.Input
        cmd.Parameters("p_quantity").Value = Convert.ToInt32(DataSet.Tables(0).Rows(i).Item(3))

        cmd.Parameters.Add("p_confirm", OracleDbType.Int16).Direction = ParameterDirection.Output

        cmd.CommandText = "pkg_erp.insert_delnote"
        cmd.CommandType = CommandType.StoredProcedure

        temp = cmd.ExecuteNonQuery()

        result = cmd.Parameters("p_confirm").Value.ToString()

        ...

    Next

End If

Next

在通过“files”文件夹的第一次迭代中,它为过程“insert_delnote”生成4个参数的列表。 在第二次迭代中,它添加另外4个参数,而只是覆盖初始4个参数的值。

任何人都可以告诉我如何通过“file”目录在每次迭代中只有4个参数?

谢谢,

1 个答案:

答案 0 :(得分:2)

您只需要在循环之前创建一次参数,然后就可以在内部循环中设置值:

cmd.CommandText = "pkg_erp.insert_delnote"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("p_delnote_id", OracleDbType.Int64).Direction = ParameterDirection.Input
cmd.Parameters.Add("p_order_id", OracleDbType.Int64).Direction = ParameterDirection.Input
cmd.Parameters.Add("p_product_id", OracleDbType.Int64).Direction = ParameterDirection.Input
cmd.Parameters.Add("p_quantity", OracleDbType.Int64).Direction = ParameterDirection.Input
cmd.Parameters.Add("p_confirm", OracleDbType.Int16).Direction = ParameterDirection.Output

For Each oFile As String In Directory.GetFiles("D:\files")

    Dim header() As String = IO.File.ReadAllLines(oFile)
    If header(0) = "<delivery_note>" Then

        XML_File = XmlReader.Create(oFile, New XmlReaderSettings())
        DataSet.ReadXml(XML_File)

        For i As Integer = 0 To DataSet.Tables(0).Rows.Count - 1
            cmd.Parameters("p_delnote_id").Value = Convert.ToInt32(DataSet.Tables(0).Rows(i).Item(0))
            cmd.Parameters("p_order_id").Value = Convert.ToInt32(DataSet.Tables(0).Rows(i).Item(1))
            cmd.Parameters("p_product_id").Value = Convert.ToInt32(DataSet.Tables(0).Rows(i).Item(2))
            cmd.Parameters("p_quantity").Value = Convert.ToInt32(DataSet.Tables(0).Rows(i).Item(3))
            temp = cmd.ExecuteNonQuery()
            result = cmd.Parameters("p_confirm").Value.ToString()

            ...

        Next
    End If
Next