2017-08-14 134 views
0

我想將幾個XML文件的內容插入到Oracle數據庫中,然後將文件移動到存檔文件夾中,但在錯誤的移動步驟中失敗:不能將文件移動到其他文件夾

The process cannot access the file because it is being used by another process.

下面是代碼:

conn.Open() 

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

    Dim cmd As New OracleCommand 
    cmd.Connection = conn 

    filename = New FileInfo(oFile).Name 

      ' integrarea de delivery notes 
      XML_File = XmlReader.Create(oFile, New XmlReaderSettings()) 
      DataSet.ReadXml(XML_File) 

      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 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() 

       If result = "0" Then 
        file_waived = file_waived & New FileInfo(oFile).Name & Environment.NewLine 
       Else 
        file_list = file_list & New FileInfo(oFile).Name & Environment.NewLine 
       End If 

      Next 

      cmd.Parameters.Remove(cmd.Parameters.Add("p_delnote_id", OracleDbType.Int64)) 
      cmd.Parameters.Remove(cmd.Parameters.Add("p_order_id", OracleDbType.Int64)) 
      cmd.Parameters.Remove(cmd.Parameters.Add("p_product_id", OracleDbType.Int64)) 
      cmd.Parameters.Remove(cmd.Parameters.Add("p_quantity", OracleDbType.Int64)) 
      cmd.Parameters.Remove(cmd.Parameters.Add("p_confirm", OracleDbType.Int16)) 

      File.Move(oFile, "D:\archive_path_FullText\" & filename) 


Next 

conn.Close() 

誰能告訴我如何使用「File.Move()」,以避免提到的錯誤消息,請?

謝謝

回答

5

附上using語句

' integrarea de delivery notes 
Using XML_File = XmlReader.Create(oFile, New XmlReaderSettings()) 
    DataSet.ReadXml(XML_File) 
End Using 

這將確保通過的XmlReader在文件創建的鎖是關閉和ReadXml方法釋放的完成後立即置於內這些線路該文件以在不同的位置被移動

見MSDN Using Statement

的USI當你處理如文件和連接,命令,讀者一次性對象納克聲明是非常重要的。從你的代碼看來,你也需要看看如何修復這些對象的使用

此外,您可以將創建的命令和循環外的所有參數移動到文件上,因此您不必手動刪除它們併爲下一個文件重新生成它們。最後,不要建立自己的路徑字符串,但使用來自System.IO命名空間提供的Path.Combine方法。

+0

的「d:\文件」文件夾中可能包含多種文件類型。除了送貨單它可以包含,例如,發票或acknw。 對於這一點,我生成的參數內循環,之後我發現的文件類型。 – mikcutu

+0

當我使用: '使用 \t XML_FILE = XmlReader.Create(OFILE,新XmlReaderSettings()) \t DataSet.ReadXml(XML_FILE) 結束Using' 它gaves我 「表達預計」 當我使用 '使用XML_FILE作爲的XmlReader = XmlReader.Create(OFILE,新XmlReaderSettings()) \t DataSet.ReadXml(XML_FILE) 結束Using' 它gaves我「變「 XML_File'在封閉塊中隱藏一個變量。 「 我究竟做錯了什麼? – mikcutu

+0

您應該刪除XML_FILE的聲明。(_Dim XML_FILE爲Xml_Reader_ – Steve

相關問題