我的任务是编写一个自动创建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
非常感谢任何帮助!
答案 0 :(得分:1)
WriteAllText()
会创建新文件或覆盖任何现有文件,因此您不需要Create()
或OpenWrite()
来电。