SSIS脚本任务System.IO.File.WriteAllText抛出“进程无法访问该文件”错误

时间:2015-03-19 16:35:30

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

我的任务是编写一个自动创建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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

WriteAllText()会创建新文件或覆盖任何现有文件,因此您不需要Create()OpenWrite()来电。