OleDB не может получить строки с другим типом данных - PullRequest
0 голосов
/ 28 марта 2012

Я пытаюсь получить DataTable из файла .xls. Ниже мой код:

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();

Проблема в том, что: В моей таблице есть некоторые несовместимые строки , что означает , что они не следуют за другими строками данных .

Скажем, в столбце А у меня есть клетки, которые должны быть такими:

105161610

146161701

196171717

.........

То есть он должен иметь тип данных Int32.

Это большинство ячеек столбца ..

У меня также есть несколько других ячеек (все еще в том же столбце), которые выглядят так:

ABC9012

KDJ0981

KLP0001

.......

Они как-то следуют string типу данных.

Когда я выполняю код, я могу только Select ячейки типа int, в то время как ячейки, имеющие другой тип (string), устанавливаются вместо null. Хотя в моем коде я в основном установил select * явно.

Может кто-нибудь посоветовать мне, как последовательно извлекать оба типа данных (вместо 1, как то, что происходит сейчас)?

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Вы должны преобразовать или преобразовать оба типа данных в 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
0 голосов
/ 12 июля 2018

Добавить строку подключения Excel IMEX = 1;HDR = {1}, как полное значение ниже

Описание: IMEX = 1 Вы можете принудительно преобразовать смешанные данные в текст. HDR = {1} означает, что первая строка содержит имена столбцов, а не строку заголовка данных, если выне хочешь тогда ставь No

...