我是C#和Visual Studio的新手。我正在编写一个小程序,它将读取.csv文件,然后将读取的记录写入SQL Server数据库表。 我可以手动解析.csv文件,但我想知道是否有可能以某种方式“描述”.csv文件到Visual Studio,以便我可以将它用作数据源?我应该提到.csv文件中的前两行包含标题信息,以下行是以逗号分隔的实际数据。
另外,我应该提一下,这个程序是一个没有用户界面的独立控制台程序。
答案 0 :(得分:3)
这是使用LINQ功能的一个很好的例子。 Here's a quick reference以及如何操作的示例。
失败就是这样。您可以将CSV读入字符串数组,然后使用LINQ查询该集合。正如Reed指出的那样,你必须围绕标题行进行编码,因为它会抛弃你的查询。
您也可以使用TextFieldParser来处理转义逗号。 Here's在thinqlinq上使用TextFieldParser来解析文件的示例,以及用于获取结果的LINQ查询。它甚至还有一个单元测试,以确保处理转义的逗号。
答案 1 :(得分:1)
如果您有2行标题,则它不是标准的CSV文件。
在这种情况下,自动工具将无法工作,您将不得不恢复手动解析文件。
如果您想删除其中一个标题行,则可以使用this technique of parsing CSV files into an ADO.NET DataTable。
但是,如果没有,Microsoft.VisualBasic.dll程序集中的TextFieldParser(也可以从C#中使用)使解析CSV文件变得非常简单。
答案 2 :(得分:1)
手动解析它非常简单,你可以有一个解析它的程序,删除前两个不必要的行,然后直接将它提供给SSIS。
以下是使用LINQ读取它的链接: http://blogs.msdn.com/wriju/archive/2009/05/24/linq-to-csv-getting-data-the-way-you-want.aspx
答案 3 :(得分:1)
通过C#使用内置OLEDB CSV解析器来解析CVS文件。 您可以找到示例here
它基本上允许您将csv文件视为数据库表。
答案 4 :(得分:1)
Development 4.0的帖子中的链接消失了。该链接中的代码如下:
class CSVParser
{
public static DataTable ParseCSV(string path)
{
if (!File.Exists(path))
return null;
string full = Path.GetFullPath(path);
string file = Path.GetFileName(full);
string dir = Path.GetDirectoryName(full);
//create the "database" connection string
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;"
+ "Data Source=\"" + dir + "\\\";"
+ "Extended Properties=\"text;HDR=No;FMT=Delimited\"";
//create the database query
string query = "SELECT * FROM " + file;
//create a DataTable to hold the query results
DataTable dTable = new DataTable();
//create an OleDbDataAdapter to execute the query
OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, connString);
try
{
//fill the DataTable
dAdapter.Fill(dTable);
}
catch (InvalidOperationException /*e*/)
{ }
dAdapter.Dispose();
return dTable;
}
}
}