【问题标题】:How to use SQL against a CSV file如何对 CSV 文件使用 SQL
【发布时间】:2012-05-24 08:31:06
【问题描述】:

我想使用 C# 对 CSV 文件使用 SQL 查询。 java here 有类似的东西。 c#有这样的东西吗?

【问题讨论】:

    标签: c# sql csv


    【解决方案1】:

    您可以使用 ODBC 对 CSV 文件运行查询:

    // using System.Data.Odbc;
    
    string strConn = @"Driver={Microsoft Text Driver (*.txt; *.csv)};" +
        "Dbq=C:;Extensions=csv,txt";
    
    OdbcConnection objCSV = new OdbcConnection(strConn);
    objCSV.Open();
    
    OdbcCommand oCmd = new OdbcCommand("select column1,column2 " +
        "from THECSVFILE.CSV", objCSV);
    OdbcDataReader oDR = oCmd.ExecuteReader();
    
    while (oDR.Read())
    {
        // Do something
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用适当的 OLE DB 提供程序来查询文本文件。您可以在此处找到查询字符串:

      Textfile Connection String Samples

      【讨论】:

      • 有没有办法使用带有 CSV 文件的 OLE DB 来解析不同的日期格式值。喜欢mm.dd.yyyymm-dd-yyyy
      【解决方案3】:
      // need to add
      // using System.Linq;
      
      void Main()
      {
          var path = @"C:\myfile.csv";
          string csv = System.IO.File.ReadAllText( path );
          var array = csv.Split(new[]{","}, StringSplitOptions.RemoveEmptyEntries);
          // Do the mapping with your databinding object
          var personArray = array.Select(p => new Person { Name = p}); 
         // You need to have this DataContext defined somewhere, for instance using LinqToSql
          using(var context = new PersonDataContext()){ 
              context.InsertAllOnSubmit(personArray);
              context.SubmitChanges();
          } 
      }
      
      // Imagine this class is one of linqToSql class
      public class Person{
          public string Name {get;set;}
      }
      

      【讨论】:

      • LINQ 是另一种获得结果的方式,尽管 OP 明确要求 sql 查询
      • 这仅适用于您的 csv 文件小到足以放入内存的情况
      【解决方案4】:
      【解决方案5】:

      您可以使用 Openrowsets 。

      首先在 SQL 配置中启用 SQL Ad Hoc/Openrowset。启用后,您将能够连接 SQL Server 管理工作室并查询 Excel 和逗号分隔的文件。

      您的查询将类似于:

      SELECT * FROM OPENROWSET('MSDASQL','Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir={your path}','SELECT * FROM ypurtextfile.csv')
      

      您可以在 C# 代码中使用这些查询,就像查询任何其他表一样。 只需与您的经理确认他是否同意您在 SQL Server 上启用 ad hoc

      【讨论】:

      • 如果您需要经常从文本或 csv 文件导入 sql 数据库,这是个好主意。对于那些只想查询并显示结果的人,第一个答案可能更好我也更喜欢数据库在 DB Admin 控制下的第一个答案。
      猜你喜欢
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 2013-11-17
      • 2019-04-06
      相关资源
      最近更新 更多