2017-08-13 240 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 
相關問題