使用sql 2008 r2,vb.net 2010,excel 2010,xls模式下的文件
我想通过vb.net以编程方式将excel电子表格导入到sql 2010中。 我有两个版本的电子表格。第一个是我用于SQL导入向导导入表的原始文件(导入向导中显示的工作表名称是Dictionary $)。
第二个版本是从sql到excel的导出(因为我做了很多手动更改)。
我可以在文件之间看到的明显差异是:
现在出现问题。 以编程方式执行并使用第二个版本(导出)将导入所有预先存在的行而不会出现问题,但如果我向电子表格添加行,导入将不会看到这些行。
如果我尝试以程序方式导入原始电子表格,则不会导入行,因为它无法在excel文件中找到表字典(字典在向导中显示$结尾)。
我正在寻找的解决方案是:
代码如下所示请注意以下代码适用于电子表格的第二个版本,并且使用SQL导出向导来生成它。如果我在电子表格的底部添加行,那么这些行也不会以编程方式导入。
Private Shared Sub ImportDictionary()
Dim curFile As String = "dictionary.xls"
Dim fullPath As String = Path.GetFullPath(curFile)
Dim Excelconnection = New OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; data source=" + fullPath + "; Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'")
Dim myConnection As New SqlConnection(SQLdbString)
Try
myConnection.Open()
Excelconnection.Open()
Dim mySelectQuery As String = "SELECT * from dictionary"
Dim myCommand2 As New OleDbCommand(mySelectQuery, Excelconnection)
Dim myReader2 As OleDbDataReader
myReader2 = myCommand2.ExecuteReader()
While myReader2.Read()
Dim myCommand As New SqlCommand
Try
myCommand.Connection = myConnection
MyQueue.Enqueue(String.Format("{0} {1} {2} {3} {4}", myReader2.GetString(0), myReader2.GetString(1), myReader2.GetString(2), myReader2.GetString(3), myReader2.GetString(4)))
myCommand.Parameters.Add("@G0", SqlDbType.VarChar).Value = myReader2.GetString(0)
myCommand.Parameters.Add("@G1", SqlDbType.VarChar).Value = myReader2.GetString(1)
myCommand.Parameters.Add("@G2", SqlDbType.VarChar).Value = myReader2.GetString(2)
myCommand.Parameters.Add("@G3", SqlDbType.VarChar).Value = myReader2.GetString(3)
myCommand.Parameters.Add("@G4", SqlDbType.VarChar).Value = myReader2.GetString(4)
myCommand.CommandText = "INSERT INTO dictionary values(@G0,@G1,@G2,@G3,@G4)"
myCommand.ExecuteNonQuery()
Catch e As Exception
Console.WriteLine(e.ToString())
Finally
myCommand.Dispose()
End Try
End While
Catch e As Exception
Console.WriteLine(e.ToString())
Finally
myConnection.Dispose()
End Try
Excelconnection.Dispose()
End Sub