代码之家  ›  专栏  ›  技术社区  ›  Ybbest

. 从Excell文件读取数据时更改为

  •  1
  • Ybbest  · 技术社区  · 14 年前

    我使用以下代码将Excel数据读取到数据表中,但是数据表中的列名p.o.box已更改为p o box。有人能解释一下为什么会发生这种情况吗?

    Dim FileName As String = "C:\abc.xls"
        Dim conn As Data.OleDb.OleDbConnection = Nothing
        Dim dt As New DataTable
    
        Try
            Try
                Try
                    conn = New Data.OleDb.OleDbConnection(String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;", FileName))
                    conn.Open()
                Catch exOleDB As System.Data.OleDb.OleDbException
                    If exOleDB.ErrorCode <> -2147467259 Then Throw exOleDB
                    'try to open an Excel 2007 file
                    conn = New Data.OleDb.OleDbConnection(String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0;", FileName))
                    conn.Open()
                End Try
            Catch ex As Exception
                Throw New Exception("Can't read the import file. Try saving the file as an Excel 97-2003 Workbook (.xls). Also check the file permissions and impersonation settings.", ex)
            End Try
            Using selectedCMD As New Data.OleDb.OleDbCommand("select * from [Users$]", conn)
                Using da As New Data.OleDb.OleDbDataAdapter
                    da.SelectCommand = selectedCMD
                    da.Fill(dt)
                End Using
            End Using
        Finally
            If conn IsNot Nothing Then
                If conn.State <> ConnectionState.Closed Then conn.Close()
                conn.Dispose()
            End If
        End Try
        Return dt
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   MikeAinOz    14 年前

    p.o.box中的句点“.”不是有效的SQL列名,因此数据适配器使它们符合要求。你得查出原因和原因

        2
  •  0
  •   Laramie    14 年前

    您需要手动处理数据集的填充,而不是使用fill()。可以使用OpenSchema获取Excel中工作表和列的名称,以构造一个限定所有对象名称的SQL语句。

    更多细节 here