【问题标题】:SSIS Script Task System.IO.File.WriteAllText throws "The process cannot access the file" ErrorSSIS 脚本任务 System.IO.File.WriteAllText 抛出“进程无法访问文件”错误
【发布时间】:2015-03-19 16:35:30
【问题描述】:

我的任务是编写一个自动创建 SQL Server 数据库的 SSIS 包。在此过程中,它需要创建一个 DSN 文件(文本文件),以便 Access 工具可以连接到 SQL Server 数据库。这都是遗留问题,我无法更改要求。我也无法改变我正在使用 VB.NET 在 Visual Studio 2005 中工作的事实。

问题是,当我尝试写入 DSN 文件时出现错误:“进程无法访问文件 '\Acmshares2\clntrial\DataMgt\DM_DSNs\DM_C001.dsn' 因为它正被另一个进程使用。”该文件正在创建中,但我无法写入它。就好像创建文件的行以某种方式“坚持”了它。这是代码 - 请注意,无论System.IO.File.OpenWrite(sFilePath) 行是否存在,都会引发错误:

Public Sub Main()
    Dim sStudyID As String
    Dim sText As String
    Dim sFileName As String
    Dim sFilePath As String

    If Dts.Variables.Contains("StudyID") = True Then
        sStudyID = CType(Dts.Variables("StudyID").Value, String)
    End If

    sText = "[ODBC]" & vbCrLf
    sText = sText & "DRIVER=SQL Server" & vbCrLf
    sText = sText & "UID=DM" & vbCrLf
    sText = sText & "DATABASE=DM_" & sStudyID & vbCrLf
    sText = sText & "WSID=ACMDM" & vbCrLf
    sText = sText & "APP=Microsoft Data Access Components" & vbCrLf
    sText = sText & "SERVER=ACMDM" & vbCrLf

    sFileName = "DM_" & sStudyID & ".dsn"
    sFilePath = "\\Acmshares2\clntrial\DataMgt\DM_DSNs\" & sFileName

    If Not System.IO.File.Exists(sFilePath) Then
        System.IO.File.Create(sFilePath)
    End If
    System.IO.File.OpenWrite(sFilePath)
    System.IO.File.WriteAllText(sFilePath, sText)

    Dts.TaskResult = Dts.Results.Success
End Sub

任何帮助将不胜感激!

【问题讨论】:

  • WriteAllText() 创建一个新文件或覆盖任何现有文件,因此您可能不需要Create() 或OpenWrite() 调用。
  • 确实没有。它现在正在工作,谢谢theduck!现在,我如何给你这个答案的声誉?

标签: vb.net ssis visual-studio-2005 dsn system.io.file


【解决方案1】:

WriteAllText() 创建一个新文件或覆盖任何现有文件,因此您不需要Create() 或OpenWrite() 调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    相关资源
    最近更新 更多