Данные не заполняются правильно в DataTable с использованием OleDbDataAdapter

Когда я пытаюсь импортировать таблицу Excel, она не получает некоторые целочисленные значения. Я использую DevExpress GridControl для экспорта данных из Grid. После экспорта я изменяю значение некоторой ячейки (которая имеет пустое значение) на целое число, скажем, 123, тогда при импорте оно не получает это целое значение в DataTable.

Я опубликовал ту же проблему в центре поддержки DevExpress " Экспорт значений в неправильной ячейке". Они сказали, что проблема из MSDN, а не из-за их контроля. Пожалуйста, скачайте образец по указанной ссылке DevExpress, а также посмотрите видео, прилагаемое для получения более подробной информации.

Я использовал следующий код для импорта.

 private System.Data.DataTable GetDataTableFromFile(string fileName)
    {
        string query = string.Empty;
        //// string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + fileName + "';Extended Properties=Excel 8.0;";
        string connectionStringV12 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0;";
        string connectionStringV4 = "Provider=Microsoft.Jet.OLEDB.4.0;Data source={0};Extended Properties=Excel 8.0;";
        System.Data.DataTable dataTable = new System.Data.DataTable();
        OleDbConnection obedbConnection = new OleDbConnection(string.Format(connectionStringV4, fileName));
        try
        {
            if (obedbConnection.State != ConnectionState.Open)
            {
                obedbConnection.Open();
            }
        }
        catch (Exception)
        {
            ////Diff. Connetion String
            obedbConnection = new OleDbConnection(string.Format(connectionStringV12, fileName));
        }

        ////Get First SheetName From Xls File 
        string sheetName = GetSheetNameFromFile(obedbConnection);

        if (sheetName != null)
        {
            ////Query for Reading all Data from File
            query = "select * from [" + sheetName + "]";
        }

        if (!string.IsNullOrEmpty(query))
        {
            OleDbDataAdapter data = new OleDbDataAdapter(query, obedbConnection);
            data.Fill(dataTable);
        }
        return dataTable;
    }

    /// <summary>
    /// Gets First SheetName of excel File 
    /// </summary>
    /// <param name="con">Connection object.</param>
    /// <returns>return sheet name.</returns>
    private string GetSheetNameFromFile(OleDbConnection con)
    {
        try
        {
            if (con.State != ConnectionState.Open)
            {
                con.Open();
            }
            var oledbTableSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
            if (oledbTableSchema.Rows.Count > 0)
            {
                string sheetName = oledbTableSchema.Rows[0].ItemArray[2].ToString();
                if (string.IsNullOrEmpty(sheetName))
                {
                    throw new Exception("Sheet Not Found");

                }
                return sheetName;
            }
            return string.Empty;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
}

Итак, кто-нибудь может помочь мне решить эту проблему?

1 ответ

Решение

Добавление свойства IMEX = 1 в строку подключения решило мою проблему.

    string connectionStringV4 = "Provider=Microsoft.Jet.OLEDB.4.0;Data source={0};Extended Properties=Excel 8.0;IMEX=1;";

Существует также похожее поведение, о котором сообщается в приведенной ниже теме

Не в состоянии прочитать целое число в файле Excel последовательно

Для более подробного ответа перейдите по следующей ссылке:

Данные не заполняются правильно в DataTable с использованием OleDbDataAdapter

Другие вопросы по тегам