@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

【ASP.NET1.1】 CSV出力について

1
投稿者投稿内容
トッティ
会議室デビュー日: 2006/10/19
投稿数: 16
投稿日時: 2006-11-15 11:22
いつも大変お世話になっております。
CSVの出力がうまくいかないので、教えて下さい。

一覧画面より、「CSV作成」ボタン(LINK BUTTON)を押下すると、CSVファイルを作成する。
以下のソースで試みたのですが、
CSVファイルは、作成されるのですが、データと一緒に表示画面のソースが一緒に出力されていまいます。データのみを出力するには、どのようにしたらよいですか。
ご指導お願い致します。

Dim con As New OleDbConnection(ConfigurationSettings.AppSettings("ConnectionString"))
Dim cmd As New OleDbCommand("", con)
Dim dr As OleDbDataReader

cmd.ComandText = "SELECT retu1,retu2 FROM TABLE WHERE ID=5"

Try
con.open
dr = cmd.ExecuteReader
If Not dr.HasRows = True Then
Response.Redirect("Default.aspx", False)
Else
Try
csvPath = "C:\sendinfo.csv"
enc = System.Text.Encoding.GetEncoding("Shift_JIS")
sw = New System.IO.StreamWriter(csvPath, False, enc)

sw.Write("会社種別")
sw.Write(Chr(44))
sw.Write("会社種別")
sw.Write(Chr(13))
sw.Write(dr(0))
sw.Write(Chr(44))
sw.Write(dr(1))
sw.Write(Chr(13))

sw.Close()

Finally
con.close
End Try
End If
catch ex as Exception
Response.Redirect("ErrorDisplay.aspx")
Finally
con.close
End Try

Response.AppendHeader("Content-Disposition", "attachment;filename=sendinfo.csv")
Response.ContentType = "application/octet-stream"
Response.WriteFile("C:\sendinfo.csv")

こばさん
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 147
投稿日時: 2006-11-15 12:41
Response.End()
トッティ
会議室デビュー日: 2006/10/19
投稿数: 16
投稿日時: 2006-11-15 13:43
こばさん

お返事有難うございます。
解決しました。
Response.End()をしないといけないのですね。

もう1点質問させて下さい。
現在、「CSV作成」ボタンをクリックすると、
「ファイルダウンロードウインドウ」が2回表示されてしますのですが、
解決策がありましたら、ご指導お願い致します。

ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-11-15 15:24
こんにちは。

引用:

トッティさんの書き込み (2006-11-15 13:43) より:

現在、「CSV作成」ボタンをクリックすると、
「ファイルダウンロードウインドウ」が2回表示されてしますのですが、
解決策がありましたら、ご指導お願い致します。


この辺は以前にも見た気がしますが、過去ログ検索をしてみるといいかもしれませんね。
せっかくなので Google 先生に聞いてみた結果出てきたのはこれでした。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5606&forum=12

それよりも、CSV ファイルを C:\ に作成していますが、これは大丈夫なのでしょうか。
Web アプリケーションを開発する上で基礎中の基礎である同時アクセスが考慮され
ていないような気がします。
(例えば、ユーザAが CSV を作成中にユーザBがアクセスしてきたら、
C:\sendinfo.csv は上書きされてしまいますよね。

この場合は StreamWriter を作るときにファイル名を渡すのではなく、元になる
MemoryStream を作成してそれを渡すようにします。
(そもそも Stream を使うほどの処理か?というのはこの際置いておくとして)
あと、Chr(44) とカンマを Chr で指定しているのは何か意味があるのでしょうか?
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
1

スキルアップ/キャリアアップ(JOB@IT)