我使用了多种方法来尝试导入这些数据(水晶报表服务器每天早上生成一个 97-2000 xls 文件,该文件完全填满第一张表,一半以上填满第二张表 - 尽管它总共有大约 120,000 条记录变化)。数据大约有十四列,但问题是第一行和第二行有一些标题数据占用了两列,无法阻止报表服务器输入。当我使用以下代码导入数据时:
Imports System.Data.OleDb
Public Class ImportData
Private Const databaselocation As String = "G:\db.mdb"
Private Const excelfileloc As String = "D:\"
Private connstr As String = "Provider=Microsoft.JET.OLEDB.4.0; Data Source=" & databaselocation & "; User Id=admin; Password=;"
Private excelstring1 As String = "Provider=Microsoft.JET.OLEDB.4.0; Data Source=" & excelfileloc
Private excelstring2 As String = "; Extended Properties=""Excel 8.0; HDR=NO; IMEX=1"";"
Public Function ImportExcel() As Boolean
Dim connection As OleDb.OleDbConnection = New OleDb.OleDbConnection(connstr)
Dim command As New OleDb.OleDbCommand
connection.Open()
command.Connection = connection
Try
Using conn As New OleDbConnection(excelstring1 & "excel.xls" & excelstring2)
Using cmd As New OleDbCommand()
cmd.Connection = conn
cmd.CommandText = "INSERT INTO [MS Access;Database=" & databaselocation & "].[dbo_impExcel] SELECT * FROM [Sheet1$]"
conn.Open()
cmd.ExecuteNonQuery()
End Using
End Using
Catch ex As Exception
End Try
End Function
End Class
它只导入前两行并忽略其余行。当我然后重复代码但使用[Sheet2$]
时,数据返回正常。如果我手动进入 excel 文件并删除标题,则数据导入正常。目前我正在使用代码首先删除标题行,但我相信应该有更好的方法。在我的实验中,我什至尝试在 MS SQL 数据库中创建存储过程,OPENROWSET
但问题仍然存在(尽管由于各种工作限制,这项工作只能依赖 JET。