OleDB无法检索具有不同数据类型的行

时间:2012-03-28 09:06:07

标签: c# .net datatable oledb xls

我正在尝试从.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)?

2 个答案:

答案 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