DataTable ColumnName Ограничения? - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь прочитать данные из файла Excel в DataSet, но моя проблема в том, что DataTable Имена столбцов не совпадают с тем, что в моем Excel. Кажется, это только столбцы с длинными именами столбцов. В именах столбцов DataTable он в какой-то момент обрезается.

Вот моя попытка:

DataSet mainExcelDataToImport = new DataSet();
using (OleDbConnection mainExcelOleDbConnection = new OleDbConnection())
{
    string theMainExcelConnectionString = this.ExcelConnectionString.Replace("{FullFilePath}", this.SelectedFilePath);
    mainExcelOleDbConnection.ConnectionString = theMainExcelConnectionString;

    // Open
    mainExcelOleDbConnection.Open();

    string mainExcelSQL = "SELECT * FROM [{ExcelSheet}$]";
    mainExcelSQL = mainExcelSQL.Replace("{ExcelSheet}", selectedExcelSheet);

    using (OleDbCommand mainExcelOleDbCommand = mainExcelOleDbConnection.CreateCommand())
    {
        mainExcelOleDbCommand.CommandText = mainExcelSQL;
        mainExcelOleDbCommand.CommandType = CommandType.Text;

        // Prepare
        mainExcelOleDbCommand.Prepare();

        using (OleDbDataAdapter mainOleDbDataAdapter = new OleDbDataAdapter(mainExcelOleDbCommand))
        {
            mainOleDbDataAdapter.Fill(mainExcelDataToImport);

            // Close
            mainExcelOleDbConnection.Close();
        }
    }
}

Вот .xlsx, который я пробовал:

A1234567890123456789012345678901234567890123456789012345678901234567890

TEST

'A12345.....' is the Column Name at A1

'TEST' is the Value at A2

When I check the `ColumnName` in the `DataTable` I get: 'A123456789012345678901234567890123456789012345678901234567890123' which is 64 characters.

Как работает ограничение ColumnName MaxLength?

Можно ли от него избавиться?

Может быть, это ограничение на OleDbDataAdapter?

Любая помощь / предложения будут оценены.

1 Ответ

3 голосов
/ 05 мая 2019

64 символа необычно длинны для имени столбца базы данных. Я никогда не видел, чтобы имя столбца подходило к этой длине.

Кажется странным, что у вас есть имя столбца так долго.

Конечно, они должны храниться где-то, поэтому в любом программном обеспечении базы данных может быть максимум, например, на сервере SQL максимум 128. Меня не удивит, если промежуточное программное обеспечение, такое как sqlclient, имеет нижний предел. Очень длинные имена такие необычные.

Вероятно, это ограничение адаптера.

Вы можете попробовать некоторые из альтернатив, упомянутых в этой теме:

Лучший / самый быстрый способ чтения листа Excel в таблицу данных?

Или, может быть, вы можете просто работать с xml, а не с данными. Xml сможет обрабатывать поля любого размера, которые умеет Excel.

https://docs.microsoft.com/en-us/office/open-xml/understanding-the-open-xml-file-formats https://docs.microsoft.com/en-us/office/open-xml/how-to-parse-and-read-a-large-spreadsheet Я

...