我试图将少量XML文件的内容插入到Oracle数据库中,然后将文件移动到存档文件夹中,但在移动步骤中失败并显示错误:
该进程无法访问该文件,因为该文件正由另一个进程使用.
这是代码:
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()
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我如何使用"File.Move()"以避免上述错误消息,好吗?
谢谢,
将这些行括在using语句中
' integrarea de delivery notes
Using XML_File = XmlReader.Create(oFile, New XmlReaderSettings())
DataSet.ReadXml(XML_File)
End Using
Run Code Online (Sandbox Code Playgroud)
这将确保XmlReader在文件上创建的锁在ReadXml方法完成后立即关闭并处理,从而释放要在不同位置移动的文件
请参阅MSDN 使用语句
当您处理文件和连接,命令,读取器等一次性对象时,using语句非常重要.从您的代码中,您似乎还需要了解如何修复这些对象的用法
您还可以在文件中移动命令的创建和循环外的所有参数,因此您不必手动删除它们并为下一个文件重新创建它们.最后,不要构建自己的路径字符串,而是使用System.IO命名空间中提供的Path.Combine方法.