使用C#中的csv文件中的select错误值

时间:2016-01-05 07:11:46

标签: c# csv odbc

我有一个csv文件,可存储一些行,如:

code      --name    --req   --country
VS161A0166--ÁO KHOÁC--S79095--VIETNAM
VS161A0240--ÁO THUN --S79096--VIETNAM

我使用Odbc连接和检索c#

中的数据
string strConnString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:;Extensions=asc,csv,tab,txt;Persist Security Info=False;HDR=NO;IMEX=1";
string sql_select;
System.Data.Odbc.OdbcConnection conn;

conn = new System.Data.Odbc.OdbcConnection(strConnString.Trim());
conn.Open();
sql_select = "select *  from [test.csv]";

obj_oledb_da = new System.Data.Odbc.OdbcDataAdapter(sql_select, conn);
obj_oledb_da.Fill(ds);

conn.Close();

但我得到了意想不到的价值

VS161A0166--ÁO KHOÁC--79095.000--VIETNAM
VS161A0240--ÁO THUN --79096.000--VIETNAM

我该如何解决?谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

所以,这看起来很奇怪,但这里是C#中一个引用VisualBasic命名空间的解决方案。我知道,奇怪。

using  Microsoft.VisualBasic.FileIO;

public List<MyVal> GetValues() {
    var path = "path/to/file";
    var list = new List<MyVal>();
    using(var csvReader = new TextFieldParser(path)) {
        csvReader.TextFieldType = FileIO.FieldType.Delimited;
        csvReader.SetDelimiters("--");
        while(!csvReader.EndOfData) {
            var currentRow = csvReader.ReadField();
            if(csvReader.LineNumber != 1)
                list.Add(new MyPoco() { Code = currentRow[0], Name = currentRow[1], Req = currentRow[2], Country = currentRow[3]});
            }
        }
    }
    return list;
}

将此作为MyPoco类使用:

public class MyPoco {
    public string Code {get;set;}
    public string Name {get;set;}
    public string Req {get;set;}
    public string Country {get;set;}
}