2016-09-22 17 views
0

私はこのプロジェクトを持っている:テキストファイルをインポートしてデータをデータベースに保存する方法は?

  1. のインポートSQL Serverデータベース
  2. 転送データベース

にすべてのデータをテキストファイルが4にタブで分けられへ.txtファイル

  • 接続フィールドのようにデータベース。

    私はリッチテキストボックスを使用して、すべてのデータを文字列に保存しました。私の考えは、行ごとに文字列を分割して配列に保存することですが、フィールドを適切に保存できるようにすべての行を分割するにはどうすればよいですか? SQL ServerのデータベースをC#のプロジェクトにどのように接続すればよいですか?

  • 答えて

    2

    は、データの取得...のは、一度にこの一歩に取り組むみましょう。これが役立ちます

    希望を助けることができる:


    文字列にテキストファイルを取得します。変数。この here

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

    もっと今、私たちは、文字列でそれを持っていることを私たちは新しい行に分割するためのそれ

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

    その他のオプションを解析することができますを見つけることができhere

    これで、各要素を独自の行に分割する必要があります。

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

    :あなたは私たちがこのような何かを行うことができるため、あなたが...それはタブが(!(CSV)カンマ区切りのようなものがモダンなより一般的ですが、タブが動作します)良いですを区切りと言いました今、あなたは(

    がデータベースに


    コードプロジェクトを接続する...私たちは今、私達のデータベース接続を必要とすることを意味する、これらのエントリのそれぞれ1を通過し、データベースに挿入するループのようなものを必要とします別の有用なサイト)は 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());} 
        } 
    

    メモループを変更する必要がある可能性があります。その背後にあるロジックは、iを4で実装することで各列を読むことができるので、Count(エントリ数)は4より小さくなければならないので、インデックスを外れないようにする必要があります(メモ帳I私はすべての論理が正しいかどうかは分かりませんが、もしそれが間違っていれば修正する必要がある場合は、単にコードを書くだけではありません)。

    ご注意ください!

    のSQLインジェクションを開いたままにしておくと、実際にはSQLパラメータを検索する必要がありますが、これでジョブが完了します。ここで私は読まなければならない考慮するいくつかの記事です:

    Preventing SQL Injections in C#

    What is an SQL Injection (W3-schools)

    +1

    は大きな助けてくれてありがとう。 ちょっとしたこと: forループは "i <= x.Count"である必要があります。そうしないと最後のエントリは保存されません。 また、最初は接続が失敗しました。接続していましたが、何も保存していませんでした。私は "Server =(local);" + "データベース=名前;" + "Trusted_Connection = yes;"すべての大文字とセミコロンで。加えて、ユーザーやキャラクターがいないので、あなたが私に送ったブログは、信頼できる接続を使用するときには必要ないと言っていました。 正しい方法で私を導いてくれてありがとう。 –

    0

    この件に関するMSDNのドキュメントhere これは、SQLサーバーデータベースに接続する方法のいくつかの詳細を提供します。

    0

    データベースに接続するには、app.configファイル内のすべての情報を含む接続文字列が必要です。一度dbに接続すると、新しい行を追加したり、コード内から新しい行を追加したりすることは問題ありません。単純に新しい行の各列の文字列データを入力する場所をクエリします。

    ドキュメントのトンは、SQLクエリの構築方法を、どのように表情を与える、MicrosoftのWebサイト上のデータベースに接続するためにあります:)

    0

    あなたは、コマンドラインからBCPを使用して試みることができます。

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

    :これはあなたが持っている、とあなたがデータベースにアクセスする方法が、基本的には、データベース・サーバー上でこれを呼び出すことができます(その隠された機能)、またはローカルにファイルをコピーすることができますアクセス許可の一覧についての仮定の束を作ります

    bcp.exeの... -S -U -P -c -t

    -cは、 "文字形式" -tは、フィールド・ターミネータですで - CAN TAB

    -Uおよび-Pのために空白のままトラステッド接続の場合は-Tに置き換えてください。

    いくつかのアドバイス:これらのことは、ステージング・テーブルにインポートし、必要な変更を行った後、SQL関数が本番表への転送を処理することによって、常により適切に処理されます。このようにして、偶然にデータを吹き飛ばさないようにすることができます。

    0

    このシナリオでは、リストとデータテーブルを作成することをお勧めします。リストの使用は配列と比較してきれいで、データテーブルを使用するデータベースの操作にも適用されます。 stackoverflowのthisポストを参照すると、テキストファイルからデータテーブルにデータを取得できます。 このpost

    関連する問題