2017-08-14 133 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

相关问题