2011-12-30 2 views
4

У меня есть winforms C#, который читает столбец из файла csv. Он читает 3 из 4 столбцов правильно. 4-й столбец в файле csv равен S4, но набор данных отображает 4.Ошибка данных при чтении csv-файла в C# winforms

Код:

string conn = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data" 
      + "Source={0}; Extended Properties=""text;HDR=YES;FMT=DELIMITED""", 
       strDirectoryPath); 

OleDbConnection oleDBConn = new OleDbConnection(conn); 
oleDBConn.Open(); 

OleDbDataAdapter da = new OleDbDataAdapter("Select * FROM [" + strFileName + "]", 
              conn); 
DataSet ds = new DataSet(); 
da.Fill(ds); 

CSV выборки данных:

AA0013 Incident Incident S4 
AA0016 Incident Incident S3 
AA0017 Incident Incident S3 
AA0023 Incident Incident S3 
AA0076 Issue  Issue  S3 
AA0079 Incident Incident S6 
AA0082 Issue  Issue  S6 
AA0084 Incident Incident S6 
AA0085 Incident Incident S6 

Что бы привести к этому, и как я могу решить это?

+3

Можете ли вы предоставить несколько строк пробы CSV? – user1231231412

+0

В этой статье рассказывается о настройке файла schema.ini, чтобы использовать материал OleDb с помощью CSV, в частности разделителей. http://weblogs.asp.net/fmarguerie/archive/2003/10/01/29964.aspx – user1231231412

+0

Я довольно уверен, что что-то вроде этого не требует изменения реестра. Тем более, что первые 3 строки точно удаляются – user1111955

ответ

2

Это происходит из-за того, что поставщик OLEDB в несколько раз автоматически определяет тип данных столбца и пытается преобразовать все значения в этом столбце в определенный тип данных, который он обнаруживает. для решения этой проблемы вам необходимо указать файл schema.ini, в котором будет храниться информация о каждом столбце и его типе данных, чтобы OLEDB не попытался неявно преобразовать любой столбец в собственный любимый тип данных:) ...

здесь является полным руководством .. http://www.aspdotnetcodes.com/Importing_CSV_Database_Schema.ini.aspx

С уважением.

+0

Unbelieveable ... но schema.ini сделал это. – user1111955

1

Самый простой способ - проанализировать файл вручную без использования подключения к базе данных.

string[] lines = File.ReadAllLines(path); 

    foreach(string row in lines) 
    { 
     string[] data = row.Split(","); 
     //Data processing goes here 
    } 

Обратите внимание, что «» как разделитель данных, вы можете использовать другой разделитель, такие как „“ или „;“

+0

Это действительно файл excel, который имеет расширение csv-файла – user1111955

Смежные вопросы