Question : error saying 'External table is not in the expected format.' when trying to update database from a dataset

Hi everybody,

Iam going crazy when iam trying to import a file to updata the database thru a dataset.   It was atleast working is some way till yesterday and today for some reason i dont know its showing this error every time i try to import my excel file.

Error:
---------------------------------------------------------------------------------
External table is not in the expected format.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.


Exception Details: System.Data.OleDb.OleDbException: External table is not in the expected format.

Source Error:


Line 103:        Dim Adapter As New OleDbDataAdapter(strQuery, strCon)
Line 104:        Dim dt As New DataTable
Line 105:        Adapter.Fill(dt)
Line 106:        Adapter.Dispose()
Line 107:        Return dt
------------------------------------------------------------------------------
Here is my table 'students'
id                int   primary key
lastname     nvarchar(50)
firstname     nvarchar(50)
ssn              nvarchar(20)
score          int

My excel file has the data for all the columns except 'id'.

Here is my code that iam using to import an excel file and trying to update the database.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i, j, n1 As Integer
         Dim dtTempTable As New DataTable
        ' readExcelSheet is a user defined function that returns me a DataTable
        dtTempTable = readExcelSheet("C:\DataFiles\Members\" & ServerFileName, "SELECT * FROM [Sheet1$]")
        Label2.Text = ServerFileName
        Dim ds As New DataSet
        Dim myConnection As SqlConnection = Connection()  'function that returns a sql connection
        Dim strSQL As String = "SELECT firstname, lastname, ssn, score FROM students"
        Label2.Text = ServerFileName & "
"


        Dim myAdapter As New SqlDataAdapter(strSQL, myConnection)
        Dim myCB As New SqlCommandBuilder(myAdapter)
        Dim drTempRow As DataRow
        myAdapter.SelectCommand.CommandType = CommandType.Text
        myCB.RefreshSchema()
        myAdapter.Fill(ds, "students")
        i = dtTempTable.Rows.Count()

        Label2.Text &= i & " records were imported.
"


        For Each drTempRow In dtTempTable.Rows()
            Dim dr As DataRow = ds.Tables("students").NewRow()
            dr("firstname") = drTempRow("firstname")
            dr("lastname") = drTempRow("lastname")
            dr("ssn") = drTempRow("ssn")
            dr("score") = drTempRow("score")
            ds.Tables("students").Rows.Add(dr)
            'ds.Tables("members").Rows.Find(keys() as object
            'increment for the next available rec id for prospect_code
        Next
        'If Not ds.HasChanges(DataRowState.Modified) Then Exit Sub
        Dim ds1 As DataSet
        'ds.Tables.

        'If (ds.HasChanges()) Then
        If ds.HasChanges() Then
            ds1 = ds.GetChanges()
            myAdapter.Update(ds1, "students")
        End If
        myConnection.Close()
    End Sub

   'function that returns a datatable from an excel sheet
    Public Function readExcelSheet(ByVal strExcelFileName As String, ByVal strQuery As String) As DataTable
        Dim strCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""" & strExcelFileName & """;Extended Properties=""Excel 8.0;HDR=YES;"""
        Dim Adapter As New OleDbDataAdapter(strQuery, strCon)
        Dim dt As New DataTable
        Adapter.Fill(dt)
        Adapter.Dispose()
        Return dt
    End Function


 

Answer : error saying 'External table is not in the expected format.' when trying to update database from a dataset

When you create Excel using HTMLTextWriter, it creates Excel sheet with HTML tags.  When you try to import this, you get the error you have right now.  I have same problem right now.  You can get by this by resaving the xls file using SaveAs.  Obviously this kills the whole purpose of automating the process.  You can however do SaveAs programatically.  Let me know if you find any other easy way of doing this.

Thanks.
Random Solutions  
 
programming4us programming4us