Как избежать OLEDB, преобразовывающего “.” s в “#\” s в именах столбцов?

Я использую драйвер OLEDB ACE для чтения из электронной таблицы Excel 2007, и я нахожу, что любой '.' символ в именах столбцов преобразовывается в '#' символ. Например, если у меня есть следующее в электронной таблице:

Name        Amt. Due        Due Date
Andrew      12.50           4/1/2010
Brian       20.00           4/12/2010
Charlie     1000.00         6/30/2010

о названии второго столбца сообщили бы как "Amt#, Должный", когда считано со следующим кодом:

OleDbConnection connection = new OleDbConnection(
    "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=MyFile.xlsx; " +
    "Extended Properties=\"Excel 12.0 Xml;HDR=YES;FMT=Delimited;IMEX=1\"");
OldDbCommand command = new OleDbCommand("SELECT * FROM MyTable", connection);
OleDbReader dataReader = command.ExecuteReader();
System.Console.WriteLine(dataReader.GetName(1));

Я прочитал всю документацию, которую я могу найти, и я не нашел ничего, что даже упоминает, что это произойдет. Кто-либо столкнулся с этим прежде? Существует ли способ зафиксировать это поведение?

5
задан Andrew Miner 29 April 2010 в 01:21
поделиться

1 ответ

Период изменяется на # , потому что . недопустимо в имени столбца. Если имя столбца используется только для внутренних целей, это не имеет никакого значения, но поскольку вы задаете вопрос, я предполагаю, что имя столбца отображается в отчете или сетке где-то с # в этом.

Если вы не знаете заранее, какие столбцы будут содержать . , затем везде, где отображается имя столбца, вы можете сделать label1.Text = colname.Replace ("#", ".") и надеяться, что ни одно из других имен столбцов не содержит # . Возможно, есть способ заставить OleDb заменить . с более неясным и редким символом (например, | или ~ ), который позволит вам заменить меньшим опасением испортить какое-либо другое имя столбца.

5
ответ дан 14 December 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: