OleDB Can';t检索具有不同数据类型的行

本文关键字:数据类型 检索 Can OleDB | 更新日期: 2023-09-27 18:29:09

我正在尝试从.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数据类型。

当我执行代码时,我只能使用int类型的Select单元,而其他类型(string)的单元则设置为null。尽管在我的代码中,我基本上明确地设置了select *

有人能建议我如何一致地检索这两种数据类型(而不是像现在这样只检索1)吗?

OleDB Can';t检索具有不同数据类型的行

您必须将这两种类型的数据强制转换或转换为SQL等效的字符串(如varchar)。

尝试以下任一操作:

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

添加excel连接字符串IMEX=1;HDR={1}类似下面的完整刺痛

描述:IMEX=1您可以强制将混合数据转换为文本HDR={1}表示第一行包含列名,而不是数据头行