我正在研究一个项目,我需要读取一个CSV文件,然后用数据填充DataSet.我一直在寻找,我在OleDB中找到了一些有趣的东西.
我有一个类CSVReader:
class CSVReader
{
public DataTable GetDataTable(string filePath)
{
OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + Path.GetDirectoryName(filePath) + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\"");
conn.Open();
string strQuery = "SELECT * FROM [" + Path.GetFileName(filePath) + "]";
OleDbDataAdapter adapter = new OleDbDataAdapter(strQuery, conn);
DataSet ds = new System.Data.DataSet("CSV File");
adapter.Fill(ds);
return ds.Tables[0];
}
}
Run Code Online (Sandbox Code Playgroud)
我从这里叫它:
CSVReader datareader = new CSVReader();
DataTable dt = datareader.GetDataTable(filepath);
Run Code Online (Sandbox Code Playgroud)
问题是它解析第一行(标题行)就像列的JUST ONE标识符一样,我的意思是:这是CSV文件的标题:
Name, Product Name, Server, Vendor, Start Time, End Time, Host Name, User Name, Project Name, Usage time (hours)
Run Code Online (Sandbox Code Playgroud)
之后,所有数据都以逗号分隔.
当我读取文件时,填充数据集并打印dt.Columns.Count,表明它只有1列.
有帮助吗?
提前致谢.
我总是使用这个CSV库通过C#读取CSV文件,它总是对我有用.
http://www.codeproject.com/KB/database/CsvReader.aspx
下面是使用该库读取CSF文件的示例
using System.IO;
using LumenWorks.Framework.IO.Csv;
void ReadCsv()
{
// open the file "data.csv" which is a CSV file with headers
using (CsvReader csv =
new CsvReader(new StreamReader("data.csv"), true))
{
int fieldCount = csv.FieldCount;
string[] headers = csv.GetFieldHeaders();
while (csv.ReadNextRecord())
{
for (int i = 0; i < fieldCount; i++)
Console.Write(string.Format("{0} = {1};",
headers[i], csv[i]));
Console.WriteLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我找到的最佳选项,它解决了您可能安装了不同版本的Office以及32/64位问题的问题,即FileHelpers.
它可以使用NuGet添加到您的项目引用中,它提供了一个单线解决方案:
CommonEngine.CsvToDataTable(path, "ImportRecord", ',', true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37432 次 |
| 最近记录: |