2016-04-16 8 views
1

私はクライアント側でASP.NET Web API 2(.NET 4.6.1)とAngularJSを使用しています。私の要件は、CSV形式またはExcel形式の表データをエクスポートすることです。セキュリティ上の理由からbcpまたはsqlcmdを使用することはできません。また、DTSパッケージを使用することはできません。パラメータはWeb UIから来るため、結果を取得してAPIを介してファイルを返送するためにストアドプロシージャに渡す必要があります。大量のデータをWeb API経由で高速にエクスポートする方法

現在、エンティティフレームワーク6を使用してすべての500KレコードをIEnumerable型に読み込もうとしています。私のテーブルには、40個以上のカラムを持つ約500,000のレコードがあります。私はそれをCSVに変換しようとしていましたが、プレーンテキストとして戻ってブラウザでBLOBとして開きました。

質問:

  1. 数秒以内にデータをエクスポートして返すために任意のより良い方法はあります。
  2. IEnumberable to CSVが唯一の方法であれば、最初にファイルを書き出してファイルを返すか、Web APIから応答としてプレーンテキストを返す必要があります。
  3. IEnumerableをCSV(String.JoinとStringBuilderを使用していますが、効果的ではありません)に変換するためにウェブからいくつかのコードを試しましたが、誰かが大量のデータをCSVに非常に速く変換する方法や、 。
+1

データの500K行では「非常に高速」*何もありません – charlietfl

答えて

0

私はそれは我々が(約)200メガバイトのデータセットDBからあなた最初のプルを見ていると、高速なことを仕事とし、クライアントに送信すると思う」いけない。あなたはCSVを圧縮するDotNetZipライブラリを使用して試みることができますクライアントに喘鳴する前に...

+0

Webサーバからdbサーバでbcpを呼び出してbcpにデータをエクスポートさせることができますか? XPを使用するSQLサーバーの_cmdshell? –

+0

私が知っているわけではありません。過去に私はいくつかのテクニックを使用して、DBからデータを高速に取得しました...その1つは、複数のクエリを並行して実行することです。たとえば、過去8日間に返されるデータが必要な場合は、毎日8つのクエリを実行できます。このトリックは、ネットワークの設定によっては動作しないかもしれません。 –

+0

私の問題は、データベースからのデータ検索ではありません。私のストアドプロシージャは、データを返すのにほとんど60秒かかりません。私の問題はcsvに変換され、Excelに戻ってクライアントに送り返されます。 –

関連する問題