我有一个 C# 程序,它应该从一个小的四列电子表格 (.xlsx) 中提取数据。它读取第一列很好,但是当它到达第二列时,我收到以下错误:
“指定的演员表无效”
我检查并重新检查了单元格的格式,第一列和第二列之间没有区别,第一列读得很好。以下是电子表格中第一行的值。每个值代表一个单独的列。
121220 330004 双 02/22/2012
这是我正在使用的代码。Id 变量加载得很好,这是导致问题的 courseCode。
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;"
+ "Data Source=C:\Projects\sym_AgentServices_INT\Book1.xlsx;"
+ "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
string queryString = "SELECT * FROM [CE$]";
try
{
OleDbDataReader reader;
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
OleDbCommand command = new OleDbCommand(queryString, connection);
connection.Open();
reader = command.ExecuteReader();
while (reader.Read())
{
string Id = "";
string courseCode = "";
string partner = "";
string effectiveDate = "";
string expirationDate = "";
Id = reader.GetString(0);
courseCode = reader.GetString(1);
partner = reader.GetString(2);
effectiveDate = reader.GetString(3);
expirationDate = reader.GetString(4);
}
}
}
编辑
我在运行时分析了 reader 对象,发现以下内容:通过多次扩展 base 并打开 System.Data.OleDb.OleDbDataReader 的 _bindings 属性,我发现那里只有一个条目(“0”) . 但是,如果我打开 0,然后展开 _columnBindings 属性,我会发现值 0 - 4。
从阅读器(“reader.GetString(x)”)中提取数据时,我的语法是否不正确?
最终编辑
我强烈建议不要使用 .GetString(x),而是直接使用 reader[x].ToString()。这解决了问题。