2

目前,我从 SQL serve 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文件中获取数据,这些txt文件的结构与SQL Server中的表相同。所以,如果我有一个名为“客户”的表,那么我有一个包含客户的 csv 文件。具有相同的列结构。CSV 中的第一行是列名,与我的表匹配。

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

SELECT * FROM Table WHERE Code = 111

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

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

4

2 回答 2

5

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

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

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

C#中DataTables的内连接

于 2012-12-05T00:49:26.947 回答
1

您可以将文本文件读入一个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

于 2012-12-05T00:47:21.357 回答