我正在尝试将应用程序从2003 VB转换为2010

时间:2015-02-22 22:47:26

标签: vb.net

我在VS 2010中打开了旧应用程序,并根据弹出的错误语句中的建议进行了更改。但是,仍然无法正常工作的一部分如下所示。

返回的错误是

  

"文件已由其他用户专门打开,或者您需要获得查看权限才能获得#34;

我正在打开一个访问数据库和"选择"并将其放在Excel工作表中。每次使用应用程序时,工作表的名称都会更改。 这在2003年有效,但在2010年没有。我已经对此进行了调查,但没有一个答案有效。

  Dim AccessConn8 As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\UpdateExportFile\ExportFile.mdb")

    AccessConn8.Open()

    Dim AccessCommand8 As New System.Data.OleDb.OleDbCommand("SELECT * INTO [Excel " & _
"5.0;DATABASE=c:\" & strfilename & ".xls;HDR=YES;].[sheet1] from ExcelExport", AccessConn8) ' 

    Try
        AccessCommand8.ExecuteNonQuery()
    Catch exe As DataException
    Catch exc As System.Exception
        MsgBox("EXCEL not updated. Contact your System Administrator. " & strfilename)
        MsgBox(" ---->  " & exc.Message)

        AccessConn8.Close() ' added sat 2/23/15

        Exit Sub
    End Try

    AccessConn8.Close()


    Dim obook As Microsoft.Office.Interop.Excel.Workbook
    Dim oexcel As Microsoft.Office.Interop.Excel.Application
    oexcel = CType(CreateObject("Microsoft.Office.Interop.Excel.Application"), Microsoft.Office.Interop.Excel.Application)

    obook = oexcel.Workbooks.Open("c:\" & strFileName & ".xls")
    Try
        With oexcel
            .Visible = False
            .Range("C1").Value = "'Store #"
            .Range("D1").Value = "'Vendor #"
        End With
    Catch ex As Exception
        MsgBox("error:" & ex.ToString, MsgBoxStyle.Critical, "ERROR")

    End Try

    ' added 

    Dim myrange As Excel.Range
    myrange = oexcel.Range("a1:l90")
    myrange.Sort(Key1:=myrange.Range("c1"), Order1:=Excel.XlSortOrder.xlAscending, Header:=Microsoft.Office.Interop.Excel.XlYesNoGuess.xlYes, Orientation:=Excel.XlSortOrientation.xlSortColumns)

    obook.Save()
    obook.Close()
    oexcel.Quit()

你能帮助我找到正确的答案吗?

1 个答案:

答案 0 :(得分:0)

我无法确定,但我怀疑这种行为是由连接池引起的,这种连接池在您尝试关闭它之后也会保持连接(也可能是文件)打开。

我建议对上面的代码进行两处更改,包括连接字符串以及打开关闭连接的方式

Using AccessConn8 As New OleDbConnection("...;OLE DB Services = -2;")
   AccessConn8.Open
   ......
   ' Code as above....
   ......
End Using

OLE DB Services = -2禁用此连接的自动使用连接池,而使用语句确保连接完成后使用它关闭和DISPOSED