2017-06-29 8 views
0

クラシックASPからCSVをエクスポートしようとしています。データはOracle DBによってフェッチされています。クエリは2500行以上を返します。ここに私が使用しようとしているコードはあります:クラシックASPを使用してCSVをエクスポート

<% 
    sub Write_CSV_From_Recordset(RS) 


     if RS.EOF then 

      ' 
      ' There is no data to be written 
      ' 
      exit sub 

     end if 

     dim RX 
     set RX = new RegExp 
      RX.Pattern = "\r|\n|,|""" 

     dim i 
     dim Field 
     dim Separator 

     ' 
     ' Writing the header row (header row contains field names) 
     ' 

     Separator = "" 
     for i = 0 to RS.Fields.Count - 1 
      Field = RS.Fields(i).Name 
      if RX.Test(Field) then 
       ' 
       ' According to recommendations: 
       ' - Fields that contain CR/LF, Comma or Double-quote should be enclosed in double-quotes 
       ' - Double-quote itself must be escaped by preceeding with another double-quote 
       ' 
       Field = """" & Replace(Field, """", """""") & """" 
      end if 
      Response.Write Separator & Field 
      Separator = "," 
     next 
     Response.Write vbNewLine 

     ' 
     ' Writing the data rows 
     ' 

     do until RS.EOF 
      Separator = "" 
      for i = 0 to RS.Fields.Count - 1 
       ' 
       ' Note the concatenation with empty string below 
       ' This assures that NULL values are converted to empty string 
       ' 
       Field = RS.Fields(i).Value & "" 
       if RX.Test(Field) then 
        Field = """" & Replace(Field, """", """""") & """" 
       end if 
       Response.Write Separator & Field 
       Separator = "," 
      next 
      Response.Write vbNewLine 
      RS.MoveNext 
     loop 

    end sub 

    Response.Buffer = True 
    Response.ContentType = "text/csv" 
    Response.AddHeader "Content-Disposition", "attachment; filename=Export.csv" 
    theSQL = Session("Query") 

    Set RS = Connection.Execute(theSQL) 
    Write_CSV_From_Recordset RS 
%> 
    <html> 

    <head> 
     <title>Excel/CSV Export</title> 
    </head> 

    <body> 

    </body> 

    </html> 

しかし、私はすべてのサイト到達不能エラーです。私はページにデータを表示しようとして、エクステンションを変更してコンテンツタイプとファイル拡張子を変えてみました。これは少ない行数で機能します。しかし、クエリによって取得されるレコードの数が多い場合、サイトに到達できないというエラーが発生します。

誰でもこの問題の解決に手伝ってもらえますか?

答えて

0

あなたのページのような音は時間がかかります。それはデータの量が少なくても動作するからです(私はあなたが言うことを理解していると思います)。あなたのページの上部に次のコードを入れて(デフォルトでは90秒である)ページのタイムアウト設定を延長してみてください:

Server.ScriptTimeout[=NumSeconds] 

私もあなたでResponse.Buffer =真行を移動しますページの上部にあり、do whileループ内では、1行ずつレスポンスをフラッシュします。それはExcelファイルに起こっているので、それはエンドユーザーに何が違うのを見ていないだろう。

do until RS.EOF 
     Separator = "" 
     for i = 0 to RS.Fields.Count - 1 
      ' 
      ' Note the concatenation with empty string below 
      ' This assures that NULL values are converted to empty string 
      ' 
      Field = RS.Fields(i).Value & "" 
      if RX.Test(Field) then 
       Field = """" & Replace(Field, """", """""") & """" 
      end if 
      Response.Write Separator & Field 
      Separator = "," 
     next 
     Response.Write vbNewLine 
     Response.Flush  '<-----add this line here 
     RS.MoveNext 

を、これは動作しない場合、あなたが取得している正確なエラーメッセージを表示するために役立つだろう。

+0

こんにちは、私はそれを試してみて、あなたが知っているだろう結果。ありがとう。 –

+0

こんにちは私は以下のエラーを受けました このサイトにアクセスすることはできません http://dev.web.com/ExcelExport.aspのウェブページは一時的にダウンしているか、新しいウェブアドレスに永久に移動している可能性があります。 ERR_INVALID_RESPONSE サーバーはWindows 2003マシンです –

+0

ページの先頭にServer.ScriptTimeout = 6000を追加しました。 –

0

詳細なエラーメッセージが表示されない場合もあります。

IISでは、ASPの[デバッグプロパティ]で[エラーをブラウザに送信]をtrueに設定します。

エラーページで、機能設定の編集で詳細エラーを選択します。

次に、ブラウザが友好的なエラーメッセージに設定されていないことを確認してください。

これらのいずれかが正しく設定されていない場合は、必要な行番号とエラーが表示されません。

これらのすべてが正しく設定されている場合は、セッションとスクリプトのタイムアウトを増やすためのアドバイスが参考になります。

0

さらに、server.scripttimeoutはデフォルトで90秒です。

あなたのウェブサイトがASP設定である場合、制限プロパティがあまり厳しくないかどうかチェックしてください。 2つのオプションがあります。Entity Body Limitは大きなアップロードを許可するためのもので、Response Buffering Limitは大きなダウンロードを許可するものです。 CSVがこの制限を超えると、ダウンロードされません。

IIS limits settings for ASP

私はあなたがすでに正しくコンテンツタイプを設定していることがわかります。ブラウザにCSVをレンダリングする場合は、出力を行う前にresponse.ContentType = "text/csv"にする必要があります。

やや無関係な、GetString()機能を使用して、ASPで(1行のコード)すぐにCSVにあなたのレコードセットをレンダリングすることも可能である:

csv = RS.GetString(2,,vbCrLf,",","")