我有一个用VB.NET编写的程序,在其中打开Excel工作簿以读取要插入到SQL Server数据库中的数据。我做一会儿rs.read并设置要插入数据库的变量。我的问题是(当我完成将数据加载到数据库中时)我尝试了几种方法来关闭Excel工作表,但它仍然保持打开状态。
代码如下:
Using myExcel As New System.Data.OleDb.OleDbConnection("provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & ImportDirectory & ImportFile & ImportFileExtension & ";Extended Properties=""Excel 12.0;HDR=YES""")
myExcel.Open()
Dim myQuery As String = "select * from [Sheet1$]"
Dim cmd As OleDbCommand = New OleDbCommand(myQuery, myExcel)
Dim rd As OleDbDataReader
rd = cmd.ExecuteReader
Do While rd.Read
Cnumber = rd.Item(0).ToString
Cname = rd.Item(1).ToString
Cadd1 = rd.Item(2).ToString
Cadd2 = rd.Item(3).ToString
Ccity = rd.Item(4).ToString
Cstate = rd.Item(5).ToString
Czip = rd.Item(6).ToString
Ctyp = rd.Item(7).ToString
If con.State = ConnectionState.Closed Then
con.ConnectionString = ConnectionStr
con.Open()
End If
With sqlCommand
.Connection = con
.CommandType = CommandType.StoredProcedure
.CommandText = "dbo.InsertCustomers"
.Parameters.Clear()
.Parameters.AddWithValue("@Cnum", Cnumber)
.Parameters.AddWithValue("@Cname", Cname)
.Parameters.AddWithValue("@Add1", Cadd1)
.Parameters.AddWithValue("@Add2", Cadd2)
.Parameters.AddWithValue("@City", Ccity)
.Parameters.AddWithValue("@state", Cstate)
.Parameters.AddWithValue("@Zip", Czip)
.Parameters.AddWithValue("@Type", Ctyp)
Try
.ExecuteNonQuery()
Catch ex As Exception
objWriter.WriteLine(ln & vbCrLf & ex.Message)
End Try
End With
Loop
rd.Close()
cmd.Dispose()
myExcel.Close()
myExcel.Dispose()
End Using
我知道我可以遍历所有进程来杀死Excel,但是用户可能会打开其他文件。我只想关闭当前正在使用的文件。任何帮助将不胜感激。