【发布时间】: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