2017-08-13 233 views
0

我有一个将文件内容插入Oracle DB的子文件。 对于只有一个文件,一切都很好,但对于多个文件,过程的参数保留旧的值,但也是新的值;所以而不是4个参数,在第二个文件我有8个参数。VB.NET - 清除传递给Oracle存储过程的参数

下面是代码的示例:通过“文件”文件夹

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 

在第一迭代时,它产生的4个参数,过程“insert_delnote”的列表。 在第二次迭代时,它会添加另外4个参数,而不是仅覆盖初始4个参数的值。

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

谢谢

回答

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 
相关问题