如何避免OLEDB将“。”转换为列名中的“#”?

时间:2010-04-29 01:10:58

标签: excel oledb

我正在使用ACE OLEDB驱动程序从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 #Due”:

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));

我已经阅读了所有可以找到的文档,但我还没有找到任何甚至提到会发生这种情况的内容。有没有人遇到过这个?有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:5)

期间更改为#,因为.在列名中不合法。如果列名仅在内部使用,那么这根本不重要,但是因为你问的问题我假设列名在一个报告或网格中显示在其中#的地方

如果您事先不知道哪些列将包含.,那么在显示列名称的任何位置都可以执行label1.Text = colname.Replace("#", ".")并希望其他任何列名都不包含{ {1}}。可能有一些方法可以让OleDb用一个更加模糊和不常见的角色(如#.)替换|,这样可以让你~更少担心捣蛋其他一些专栏名称。

答案 1 :(得分:2)

请参阅此OleDBAdapter Excel QA我通过堆栈溢出发布。

我使用您的数据在Excel中创建了一个.xlsx工作簿,然后更改了OleDbConnection并且读取了您的数据就好了。

string sql = "SELECT F1, F2, F3 FROM [sheet1$] WHERE F1 IS NOT NULL";

OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + PrmPathExcelFile + @";Extended Properties=""Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text""");

将数据写入控制台:

Name  Amt. Due  Due Date
Andrew  12.50  4/1/2010
Brian  20.00  4/12/2010