나는 FOXPRO/FOXWEB 응용 프로그램을 ASP.NET으로 변환하고 있습니다.CSV를 즉시 작성하여 클라이언트로 다운로드
기본 DB는 여전히 foxpro입니다 (잠시 동안).
테이블을 일부 VB.NET 코드로 전달하여 CSV 파일로 변환하고 클라이언트로 다운로드하여 보내도록하고 있습니다. 그리고 그것은 작동합니다! 일종의 ... 때로는 작동하지만 다른 번에 CSV 파일을 다운로드할지 묻는 대신 파일을 브라우저 창에 표시합니다.
asp 쪽에서 응답 개체, 테이블 및 csv 파일 이름을 전달합니다. 파일 clsCommon.vb에서
<%
Dim xls_fn As String = "test01.csv"
'OLEDB call to fill up 'tbl' ... this works.
sendTableAsCSVtoClient(response, tbl, xls_fn)
%>
, 나는 다음과 같은 코드가 있습니다
Option Explicit On
'Option Strict On
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.Page
Imports System.IO
Imports Microsoft.VisualBasic
Imports System.Diagnostics
Imports System.Data
Imports System.Data.OleDb
Public Class clsCommon
Inherits Page
Public Shared Function enq(ByVal str As String) As String
Dim dq As String
dq = """"
Return dq & str & dq
End Function
' some other functions and subs defined in here ... blah blah blah
' ...
Public Shared Function sendTableAsCSVtoClient(ByVal resp As HttpResponse, ByVal sqlTable As DataTable, ByVal xls_fn As String) As Boolean
Dim r As DataRow
Dim c As DataColumn
Dim sep As String = ","
Dim FileExtension As String
Dim lcFileNameONLY As String
Dim i As Integer
Dim dq As String = """"
FileExtension = UCase(Path.GetExtension(xls_fn))
lcFileNameONLY = UCase(Path.GetFileNameWithoutExtension(xls_fn))
resp.Clear()
resp.ClearContent()
resp.ClearHeaders()
resp.ContentType = "application/vnd.ms-excel"
resp.AddHeader("Content-Disposition", "inline; filename=" & lcFileNameONLY & ".csv")
For Each c In sqlTable.Columns
resp.Write(UCase(c.ColumnName) & sep)
Next
resp.Write(vbCrLf)
For Each r In sqlTable.Rows
For i = 0 To sqlTable.Columns.Count - 1
resp.Write(enq(r(i)) & sep)
Next
resp.Write(vbCrLf)
Next
resp.End()
Return True
End Function
End Class
- 이의 원인은 무엇입니까?
- 어떻게 해결할 수 있습니까?
나는 데이터 소스가 테이블이라는 사실을 염두에 두지 않는다. 파일은 즉시 만들어지며 서버의 파일 시스템에 존재하지 않습니다.
텍사스, TFF
크랩. 나는 얼마나 오래 내가 쳐다 보았는지 말할 때 당황 스럽다. 에티켓의 요점 :이 전체 질문을 너무 어리 석은 것으로 삭제해야합니까? – elbillaf
@TheFallibleFiend - 어리석은 질문이나 다른 문제도있을 수 있습니다. 다른 사람들이 찾아서 배울 수 있도록 질문을 열어 두십시오. – Oded