将excel 2010导入sql 2010

时间:2012-12-28 19:24:08

标签: sql-server-2008-r2 vb.net-2010 excel-2010 import-from-excel

使用sql 2008 r2,vb.net 2010,excel 2010,xls模式下的文件

我想通过vb.net以编程方式将excel电子表格导入到sql 2010中。 我有两个版本的电子表格。第一个是我用于SQL导入向导导入表的原始文件(导入向导中显示的工作表名称是Dictionary $)。

第二个版本是从sql到excel的导出(因为我做了很多手动更改)。

我可以在文件之间看到的明显差异是:

  1. 导入向导中的工作表名称没有$ after字典。
  2. 电子表格中的每个单元格都有一个'(单元格开头的单引号)。
  3. 现在出现问题。 以编程方式执行并使用第二个版本(导出)将导入所有预先存在的行而不会出现问题,但如果我向电子表格添加行,导入将不会看到这些行。

    如果我尝试以程序方式导入原始电子表格,则不会导入行,因为它无法在excel文件中找到表字典(字典在向导中显示$结尾)。

    我正在寻找的解决方案是:

    • 我是否需要在excel文件中启用以允许以编程方式导入SQL?
    • 我该如何处理来自sql的导出文件,这样如果我添加行,可以在以后需要时重新导入?

    代码如下所示请注意以下代码适用于电子表格的第二个版本,并且使用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
    

0 个答案:

没有答案