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)吗?
您必须将这两种类型的数据强制转换或转换为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}表示第一行包含列名,而不是数据头行