1

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

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

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

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

  1. 导入向导中的工作表名称在字典后没有 $。
  2. 电子表格中的每个单元格都有一个'(单元格开头的单引号')。

现在到问题的问题。以编程方式执行此操作并使用第二个版本(导出)将毫无问题地导入所有预先存在的行,但如果我将行添加到电子表格中,则导入将看不到这些行。

如果我尝试以编程方式导入原始电子表格,则不会导入任何行,因为它在 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
4

0 回答 0