从SQL Server读取 - 需要从CSV读取

时间:2012-12-05 00:36:35

标签: c# sql datatable

目前,我从SQL serve r(2008)数据库中获取数据。 cyurrent方法是使用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中的表具有相同的结构。所以,如果我有一个名为'Customer'的表,那么我有一个带有Customer的csv文件。具有相同的列结构。 CSV中的第一行是列名,与我的表匹配。

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

SELECT * FROM Table WHERE Code = 111

然而,有一个案例我会加入。这可能有点棘手,但我可以制定一个计划。如果我可以先将txt文件放到数据表中,我可以使用它。

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

2 个答案:

答案 0 :(得分:5)

首先,您需要将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#

答案 1 :(得分: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