【问题标题】:Reading from SQL Server - need to read from CSV从 SQL Server 读取 - 需要从 CSV 读取
【发布时间】:2012-11-22 18:16:09
【问题描述】:

目前,我从 SQL server r(2008) 数据库中获取数据。目前的方法是使用一个DataTable,然后传递使用。

    if (parameters != null)
    {
        SqlDataAdapter _dataAdapter = new SqlDataAdapter(SqlQuery, CreateFORSConnection());
        foreach (var param in parameters)
        {
            _dataAdapter.SelectCommand.Parameters.AddWithValue(param.Name, param.Value);
        }
        DataTable ExtractedData = new DataTable(TableName);
        _dataAdapter.Fill(ExtractedData);
        return ExtractedData;
    }
    return null;

但是现在,用户说我们也可以从txt文件中获取数据,这些文件与SQL Server中的表具有相同的结构。所以,如果我有一个名为“客户”的表,那么我有一个包含客户的 csv 文件。具有相同的列结构。 CSV 中的第一行是列名,与我的表匹配。

是否可以将 txt 文件读入数据表,然后以某种方式在该数据表上运行 SELECT? 大部分我的查询都是单表查询:

SELECT * FROM Table WHERE Code = 111

但是,有一种情况是我进行了联接。这可能有点棘手,但我可以制定一个计划。如果我可以先将 txt 文件放入数据表中,我可以使用它。

使用上面的代码,我可以不将连接字符串更改为从 CSV 而不是从 SQL Server 读取吗?

【问题讨论】:

    标签: c# sql datatable


    【解决方案1】:

    首先,您需要将 CSV 数据读入 DataTable。那里有许多 CSV 解析器,但由于您更喜欢使用 ADO.NET,因此可以使用 OleDB 客户端。请参阅以下文章。

    http://www.switchonthecode.com/tutorials/csharp-tutorial-using-the-built-in-oledb-csv-parser

    加入有点困难,因为两组数据位于不同的位置。但是您可以做的是获取两个 DataTables(每个来源一个),然后使用 Linq 加入它们。

    Inner join of DataTables in C#

    【讨论】:

      【解决方案2】:

      您可以将文本文件读入List<string>(如果每个文件只有 1 列),然后使用 LINQ 查询列表。例如:

      var result = from entry in myList
          where entry == "111"
          select entry;
      

      当然,这个例子有点没用,因为你得到的只是你正在搜索的同一个字符串。但是如果文件中有多个列,并且它们与您的DataTable中的列匹配,为什么不将文件读入数据表,然后使用LINQ查询表呢?

      这是一个关于如何使用 LINQ 查询 DataTable 的简单教程: http://blogs.msdn.com/b/adonet/archive/2007/01/26/querying-datasets-introduction-to-linq-to-dataset.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多