2012-07-20 76 views
1

我的問題很簡單但很複雜。我是一個SQL數據庫開發人員,現在必須創建一個包含C#代碼的SSIS包。該代碼需要做一些事情,但我遇到的問題是:使用C#將文本文件中特定行的數據加載到SQL中

  1. 讀取文本文件的最後一行並將該行插入到SQL表中的列中。
  2. 需要將第2行到第2行的每個詳細行插入到另一個表中。

我對C#比較陌生,不知道如何去做這件事。有人能指導我在正確的方向嗎?

回答

3

該文件有多大?如果你可以看到這一切到內存中,它會讓生活很多簡單:

string[] lines = File.ReadAllLines("file.txt"); 

// Could use lines[lines.Length - 1] but LINQ makes it simpler... 
string lastLine = lines.Last(); 

IEnumerable<string> otherLines = lines.Skip(1).Take(lines.Length - 2); 

所以這是「獲取數據從一個文件」的一部分。對於數據庫部分,你並沒有真正給我們足夠的信息來幫助你。你需要確定你將如何進行數據庫訪問(直接ADO.NET,LINQ等),然後閱讀關於該主題的教程。周圍有很多。

+0

感謝您的幫助。這已經指向了我正確的方向。至於我如何訪問數據庫,我還不確定。我首先需要弄清楚如何提取數據等,然後才能打破我的頭腦。感謝您快速回復! – 2012-07-20 08:56:17

+0

這些文件大約12 MB,似乎包含大約40000奇數記錄... – 2012-07-20 09:09:45

0

試試這個發現在網上你

public static String ReadLastLine(string path) 
{ 
    return ReadLastLine(path, Encoding.ASCII, "\n"); 
} 

public static String ReadLastLine(string path, Encoding encoding, string newline) 
{ 
    int charsize = encoding.GetByteCount("\n"); 
    byte[] buffer = encoding.GetBytes(newline); 
    using (FileStream stream = new FileStream(path, FileMode.Open)) 
    { 
     long endpos = stream.Length/charsize; 
     for (long pos = charsize; pos < endpos; pos += charsize) 
     { 
      stream.Seek(-pos, SeekOrigin.End); 
      stream.Read(buffer, 0, buffer.Length); 
      if (encoding.GetString(buffer) == newline) 
      { 
       buffer = new byte[stream.Length - stream.Position]; 
       stream.Read(buffer, 0, buffer.Length); 
       return encoding.GetString(buffer); 
      } 
     } 
    } 
    return null; 
} 

http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/ff6c07e2-9c36-4490-a989-f24dcff76145

+0

謝謝,約翰。我肯定會研究這個! – 2012-07-20 09:09:56

+0

否thnx,是否更快;否則 – JohnnBlade 2012-07-20 09:22:17

+0

你需要連接什麼樣的數據庫? – JohnnBlade 2012-07-20 09:23:45

相關問題