2016-11-07 12 views
2

こんにちは、いくつかのプロジェクトをASP.Netコアに移行し、.CSVファイルをSQLデータベースにアップロードする正しい方法についていくつか問題があります。ASP.NetコアでSqlBulkCopyを使用して.CSVをインポートする

以前は、.CSVファイルループをアップロードしてその情報をDataTableに格納し、単にSqlBulkCopy.WriteToServerを実行しましたが、現在は.Net CoreにDataTableオブジェクトがないことがわかりました。 SQLBulkCopyは、DataTableではなくDbDataReaderを受け入れます。

これを機能させるにはどのような方法が最適ですか?私はファイルをアップロードして、自分のSQLデータベースへのアップロードを行うために必要なデータを適切な形式で取得するために必要なコンテンツを扱うことができます。

任意のアイデアを開くことができます。ありがとう。

+0

は、このライブラリを試してみてください:列にhttps://github.com/borisdj/EFCore.BulkExtensions – borisdj

答えて

1

私はFastMember's objectreaderとし、このようなcolumnmappingを使用して、それを解決した:

List<Data> lstData = new List<Data>(); 
     //fill list of data.. 

     using (var sqlCopy = new SqlBulkCopy(Config.get("Data:db:ConnectionString"))) 
     { 
      sqlCopy.DestinationTableName = "[tblBulkCopy]"; 
      sqlCopy.BatchSize = 500; 

      //map property index to column index in table. in database table the first column is the identitycolumn 
      sqlCopy.ColumnMappings.Add(0, 1); 
      sqlCopy.ColumnMappings.Add(1, 2); 
      sqlCopy.ColumnMappings.Add(2, 3); 

      var records = lstData.Select(obj => new { col1 = obj.number1, col2 = obj.number2, col3 = obj.number3 }); 

      using (var reader = ObjectReader.Create(records, new[] { "col1", "col2", "col3" })) 
      { 
       sqlCopy.WriteToServer(reader); 
      } 
     } 
+0

'//マップのプロパティのインデックステーブル内のインデックス。データベーステーブルの最初の列はIDC列です。そのビットは私にあまりにも多くの問題を救った。あなたのfindnigsを投稿する時間をとってくれてありがとう –

関連する問題