У меня есть файл csv со следующими данными:
FIBO.csv
41,3
36445122,EURUSD,4,0.01,1.05828,1,1.00881,10,66
36445121,EURUSD,4,0.01,1.05828,1,1.00881,10,66
36445120,EURUSD,4,0.01,1.05828,1,1.00881,10,66
Когда я читаю этот файл с помощью провайдера OLEDB
, он правильно возвращает идеальную таблицу данных.
Этот код здесь:
public DataTable CsvFileToDatatable(string path, bool IsFirstRowHeader)
{
string header = "No";
string sql = string.Empty;
DataTable dataTable = new DataTable();
string pathOnly = string.Empty;
string fileName = string.Empty;
try
{
pathOnly = System.IO.Path.GetDirectoryName(path);
fileName = System.IO.Path.GetFileName(path);
sql = @"SELECT * FROM [" + fileName + "]";
if (IsFirstRowHeader)
{
header = "Yes";
}
using (OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly +
";Extended Properties=\"Text;IMEX = 1;HDR=" + header + "\""))
{
using (OleDbCommand command = new OleDbCommand(sql, connection))
{
using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
{
dataTable = new DataTable();
dataTable.Locale = CultureInfo.CurrentCulture;
adapter.Fill(dataTable);
}
}
}
}
catch
{
if (dataTable == null)
dataTable = new DataTable();
}
finally
{
}
return dataTable;
}
НО, когда файл csv имеет такие значения:
41,3
36445122,EURUSD,4,0.01,1.05828,1,1.00881,10,66
то в возвращаемой таблице данных отсутствует EURUSD.
Если я добавлю еще одну строку, все данные вернутся отлично. Проблема возникает, только если у меня есть две строки, как чуть выше.
У меня было несколько таких файлов, и все они имеют одинаковые проблемы. Я не уверен, что с этим не так.
Я поставил IMEX=1
, но ничего не работает.
TypeGuessRows=0
. но это заставило мои первые два заголовка столбца исчезнуть, и вместо этого он показывает41,1
..., которые были моей первой строкой. и в первой строке полная строка данных отображается с EURUSD - person Abdur Rahim   schedule 14.03.2017