【问题标题】:Can a .csv file be used as a data source in Visual Studio 2008?.csv 文件可以用作 Visual Studio 2008 中的数据源吗?
【发布时间】:2010-03-31 02:40:01
【问题描述】:

我对 C# 和 Visual Studio 还是很陌生。我正在编写一个小程序,它将读取一个 .csv 文件,然后将读取的记录写入 SQL Server 数据库表。 我可以手动解析 .csv 文件,但我想知道是否有可能以某种方式将 .csv 文件“描述”到 Visual Studio 以便我可以将其用作数据源?我应该提一下,.csv 文件中的前两行包含标题信息,以下几行是实际的逗号分隔数据。

另外,我应该提一下,这个程序是一个没有用户界面的独立控制台程序。

【问题讨论】:

    标签: c# visual-studio-2008 csv


    【解决方案1】:

    这是使用 LINQ 功能的一个很好的例子。 Here's a quick reference 有一个如何做的例子。

    失败是这样的。您可以将 CSV 读入字符串数组,然后使用 LINQ 查询该集合。正如 Reed 指出的那样,您必须围绕标题行编写代码,因为它会抛出您的查询。

    您也可以使用 TextFieldParser 来处理转义逗号。 Here's Thinqlinq 上的一个示例,它使用 TextFieldParser 来解析文件,并使用 LINQ 查询来获取结果。它甚至有一个单元测试来确保处理转义的逗号。

    【讨论】:

    • 非常感谢!我现在就去看看那个链接!
    • 它不会处理“真实”的 CSV 文件,例如 Excel 的输出或 Access 输出等,因为它不处理带引号的字符串等。
    【解决方案2】:

    如果您有 2 行标题,则它不是标准 CSV 文件。

    在这种情况下,自动工具将不起作用,您必须恢复为手动解析文件。

    如果您想删除其中一个标题行,您可以使用this technique of parsing CSV files into an ADO.NET DataTable

    如果不是,那么 Microsoft.VisualBasic.dll 程序集中的TextFieldParser(也可以从 C# 中使用)使得解析 CSV 文件变得非常简单。

    【讨论】:

    • 哇!我希望有一种方法可以制作 .csv 文件的“框架”或“模式”,这样我就可以忽略标题信息。唔。不过,我想我可以剥离标题信息并将数据写入“临时”.csv 文件。
    • 感谢这些链接,里德!我很感激。
    【解决方案3】:

    手动解析它非常简单,你可以有一个程序来解析它,去掉前两行不必要的行,然后直接将其提供给 SSIS。

    这是一个使用 LINQ 读取它的链接: http://blogs.msdn.com/wriju/archive/2009/05/24/linq-to-csv-getting-data-the-way-you-want.aspx

    【讨论】:

    • 谢谢!到目前为止,该链接似乎很受欢迎!是的,剥离两个标题行的好主意。在您和 Aaron 建议的网站上阅读更多内容后,我想我可能能够处理这个问题。谢谢!
    【解决方案4】:

    通过 C# 使用内置的 OLEDB CSV 解析器来解析 CVS 文件。 您可以找到样本here

    它基本上可以让您将 csv 文件视为数据库表。

    【讨论】:

    • 谢谢,开发者!我会检查您链接到的示例。
    【解决方案5】:

    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;
       }
     }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      相关资源
      最近更新 更多