2016-09-22 161 views
0

我有這樣的項目:如何導入文本文件並將數據保存到數據庫中?

  1. 導入.txt文件
  2. 連接到SQL Server數據庫
  3. 傳輸的所有數據存入數據庫

的文本文件由製表四個分字段以及數據庫。

我已經完成了使用富文本框並將所有數據保存在字符串中的第一步。我的想法是將每一行分割字符串並將其保存在數組中,但是:如何分割每一行以便我可以正確保存字段?如何將SQL Server上的數據庫連接到C#上的項目?

回答

2

讓我們來解決在這個時間一步...

獲取數據:


獲取文本文件轉換成字符串變量。

string readText = File.ReadAllText("path to my file.txt"); 

更多關於此here

現在,我們已經在一個字符串,我們可以在新行解析爲分裂

List<string> listStrLineElements = List<string> listStrLineElements = line.Split(new string[] { Environment.NewLine }, StringSplitOptions.None).ToList();// You need using System.Linq at the top. 

更多選擇,可以發現here

現在,你需要將每個元素分成它自己的行;你說你有這片分隔這是很好的(像逗號分隔(CSV)是較常見的現代,但標籤將工作!)......爲此,我們可以做這樣的事情:

List<string> rowList = listStrLineElements.SelectMany(s => s.Split('\t')).ToList();// The \t is an *escape character* meaning tab. 

現在,你需要像一個循環的東西要經過這些條目中的每一個,並將其插入到數據庫中,這意味着我們現在需要我們的數據庫連接...

連接到數據庫


代碼項目(另一個有用的網站)有關於makin的 this教程g來自C#的SQL連接;下面是一個代碼彙總(請閱讀文章,這個網站是不是在這裏讓人們寫/找到代表你的代碼!)

確保您使用的是SQL命名空間...

using System.Data.SqlClient; 

private void sqlCon(List<string> x) 
    { 
     //Replace with your server credentials/info 
     SqlConnection myConnection = new SqlConnection("user id=username;" +"password=password;server=serverurl;" +"Trusted_Connection=yes;" +"database=database; " + "connection timeout=30"); 
     try 
     { 
      myConnection.Open(); 
      for (int i = 0; i <= x.Count -4; i += 4)//Implement by 3... 
      { 
       //Replace table_name with your table name, and Column1 with your column names (replace for all). 
       SqlCommand myCommand = new SqlCommand("INSERT INTO table_name (Column1, Column2, Column3, Column4) " + 
            String.Format("Values ('{0}','{1}','{2}','{3}')", x[i], x[i + 1], x[i + 2], x[i + 3]), myConnection); 
       myCommand.ExecuteNonQuery(); 
      } 

     } 
     catch (Exception e){Console.WriteLine(e.ToString());} 
     try{myConnection.Close();} 
     catch (Exception e){Console.WriteLine(e.ToString());} 
    } 

請注意,您可能很可能必須更改/編輯我的循環;它背後的邏輯是實現4乘以所以你可以閱讀你的每一列,所以列數(條目數)必須少於4,所以你不會得到一個索引越界(在記事本I中輸入這一切我不確定我是否擁有所有的邏輯,但是如果錯誤是您必須解決的問題,我們不會爲人們編寫代碼)。

請注意!

像string.format()這樣的東西讓你打開一個SQL注入,你真的應該查詢SQL參數,但這將完成工作。以下是我認爲一定要讀一些帖子:

Preventing SQL Injections in C#

What is an SQL Injection (W3-schools)

+1

謝謝你很大的幫助。 只是一件事: for循環必須是「我<= x.Count」或它永遠不會保存最後一個條目,花了我一段時間來解決這個問題。 此外,首先連接「失敗」。這是連接,但沒有保存任何東西。我用「服務器=(本地);」 +「數據庫=名稱;」 +「Trusted_Connection = yes;」與所有的大寫和分號。另外,沒有用戶或角色,您發送給我的博客表示在使用可信連接時沒有必要,這是正確的。 再次感謝您以正確的方式帶領我。 –

0

您應該查看有關此主題的MSDN文檔here 這將提供有關如何連接到SQL Server數據庫的一些詳細信息。

0

要連接數據庫,您需要一個連接字符串,其中包含app.config文件中的所有信息。一旦你連接到數據庫,應該沒有問題添加一個新行,甚至更新你的代碼。只需構建一個查詢,您可以在其中爲新行的每一列輸入字符串數據。

有關於如何建立SQL查詢,以及如何連接到Microsoft網站上的數據庫一噸的文檔,給它看看:)

0

你可以嘗試使用BCP命令行。這使得一幫什麼權限你有,你如何訪問數據庫,但基本上你可以調用這個在數據庫服務器上(它是一個隱藏的功能),也可以本地複製文件的假設:

https://msdn.microsoft.com/en-us/library/ms162802.aspx

BCP.EXE ..在-S -U -P -c -t

-c是 「字符格式」 -t是字段終止 - 留空TAB

-U和-P可以如果它是可信連接,則用-T替換。

一些建議:通過導入到臨時表,進行所需的任何更改,然後使用SQL函數處理傳輸到生產表,可以更好地處理這些事情。這樣你可以確保你不會意外地吹走數據。

0

我會建議讓我們如果列表和數據在這種情況下。列表的使用與數組相比是乾淨的,同樣適用於使用數據表的數據庫操作。 您可以參考this在stackoverflow上發佈數據從文本文件到數據表。 這post也有助於

希望這有助於..

相關問題