【发布时间】:2012-04-11 20:32:28
【问题描述】:
我正在尝试从 .xls 文件中检索 DataTable。以下是我的代码:
OleDbConnection MyConnection = null;
DataSet DtSet = null;
OleDbDataAdapter MyCommand = null;
MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + path + "';Extended Properties=Excel 8.0;");
//path is where the .xls file located
ArrayList TblName = new ArrayList();
MyConnection.Open();
DataTable schemaTable = MyConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
foreach (DataRow row in schemaTable.Rows)
{
TblName.Add(row["TABLE_NAME"]);
}
MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [" + TblName[0].ToString() + "] order by Material", MyConnection);
DtSet = new System.Data.DataSet();
MyCommand.Fill(DtSet);
MyCommand.FillSchema(DtSet, SchemaType.Source);
DataTable dt = new DataTable();
dt = DtSet.Tables[0];
MyConnection.Close();
问题是:我的表中有一些不一致的行,这意味着它们不遵循其他行的数据类型。
假设在 A 列中,我的单元格应该是这样的:
105161610
146161701
196171717
…………
意思是说它应该是Int32 数据类型。
这些是大多数列单元格..
我还有一些其他单元格(仍在同一列中),如下所示:
ABC9012
KDJ0981
KLP0001
.......
他们以某种方式遵循string 数据类型。
当我执行代码时,我只能将Selectint 类型的单元格设置为string,而将其他类型的单元格(string)设置为null。虽然在我的代码中我基本上明确设置了select *。
有人可以建议我如何始终如一地检索这两种数据类型(而不是像现在发生的那样只有一种)吗?
【问题讨论】:
-
我认为这可能是相关的。 [导入包含混合数据类型的Excel数据][1][1]:stackoverflow.com/questions/3232281/…
标签: c# .net datatable oledb xls