2012-12-05 45 views
2

目前,我從SQL服務r(2008)數據庫獲取數據。循環方法是使用DataTable,然後傳遞並使用它。從SQL Server讀取 - 需要從CSV讀取

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?

回答

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

您可以將文本文件讀入List<string>(如果每個文件只有1列),然後使用LINQ查詢列表。例如:

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

當然,這個例子是沒有用的,因爲你找回的所有字符都是你正在搜索的字符串。但是,如果文件中有多列,並且它們與您的DataTable中的列匹配,那麼爲什麼不將該文件讀入數據表,然後使用LINQ來查詢表?

下面是有關如何使用LINQ查詢數據表中一個簡單的教程: http://blogs.msdn.com/b/adonet/archive/2007/01/26/querying-datasets-introduction-to-linq-to-dataset.aspx