我正在尝试从.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
数据类型。
当我执行代码时,我只能Select
int
类型的单元格,而具有其他类型(string
)的单元格则设置为null
。虽然在我的代码中我基本上设置了select *
。
有人可以告诉我如何一致地检索这两种数据类型(而不是像现在发生的那样只有1)?
答案 0 :(得分:1)
您必须将这两种类型的数据转换或转换为等同于varchar
等字符串的SQL。
尝试以下任一项:
1. select cast(Column_A as varchar) Column_A from TableName order by Material
2. select convert(varchar, Column_A) Column_A from TableName order by Material
答案 1 :(得分:0)
添加excel连接字符串IMEX = 1; HDR = {1},如下所示
描述:IMEX = 1您可以强制将混合数据转换为文本 HDR = {1}表示第一行包含列名,如果您不想的话则不包含数据标题行,然后输入No