2017-03-03 14 views
0

Soooooooo ...私はインポートしているCSVファイルの内容から更新する必要があるSQL Serverテーブルを持っています。基本的に、キーがセルAの内容と一致するレコードがある場合は、そのレコードの1つのフィールドをセルBの内容で更新します。他の場所で見つかった一部のスニペットから、一時テーブルを作成する必要があります以下のように行う:CSVファイルからSQL Serverテーブルを更新しますか?

 protected void UploadBtn_Click(object sender, EventArgs e) 
     { 
      string csvPath = Server.MapPath("~/Uploads/") + Path.GetFileName(RadAsyncUpload1.UploadedFiles[0].FileName); 
      DataTable dt = new DataTable(); 
      dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Customer Ref", typeof(string)), 
            new DataColumn("Inventory #", typeof(string)), 
           }); 


      string csvData = File.ReadAllText(csvPath); 
      foreach (string row in csvData.Split('\n')) 
      { 
       if (!string.IsNullOrEmpty(row)) 
       { 
        dt.Rows.Add(); 
        int i = 0; 
        foreach (string cell in row.Split(',')) 
        { 
         dt.Rows[dt.Rows.Count - 1][i] = cell; 
         i++; 
        } 
       } 
      } 
     } 



    } 
} 

しかし、私はここからどこへ行くのようにかなり困惑を...

何かアドバイス/提案/ポインタをいただければ幸いです!あなたのCSVファイルの内容と常に、

ポール

+0

これは実際にSQLサーバーにデータを挿入する実際の方法ではないと思います... CSVからテーブルにデータを挿入するだけであれば、OPENROWSETを試しましたか?ロジックをSPに入れ、コードから実行することができます。 – asemprini87

+0

@ asemprini87あなたが正しくあなたを理解しているかどうかわかりません...私はデータを挿入していません。 – PaulBinCT2

+0

これは、テーブル値のパラメータのように聞こえるのは、最も簡単な解決策です。必要な2つの列を持つユーザー定義の表型を作成します。次に、DataTableに値をロードします。最後に、このデータのコレクションを受け取って更新を実行するストアドプロシージャを作成します。プロシージャの内部から、他のテーブルと同じようにパラメータを扱うことができます。 –

答えて

0

だからあなたのサンプルコードでは、あなたが(あなたのプログラムのではなく、SQL Serverの)メモリにDataTableを作成したとして

おかげで、。これはあなたの目標に向かって何も買っていません。

SQL Serverの一時テーブルにデータをアップロードし、UPDATEステートメントを実行して、一時テーブルをライブデータに追加する必要があります。

途中でSQLサーバーに接続し、tempテーブルを作成するコマンドを実行し、ループ内のコマンドを実行してその一時テーブルにレコードをアップロードし、updateステートメントでコマンドを実行し、最後に一時テーブルを削除するコマンド。

+0

データテーブルをループして、一致するレコードがあり、そのレコードからレコードを更新することはできませんか? – PaulBinCT2

+0

本当にこのためのループは必要ありません。これは、テーブル値のパラメータを使用する点になります。 –

関連する問題