我正在将一堆FOXPRO/FOXWEB应用程序转换为ASP.NET。将即时创建的CSV发送回客户端进行下载
底层数据库仍然是foxpro(目前)。
我正在将一个表传递给一些我想要转换为CSV文件并发送回客户端进行下载的VB.NET代码。它的工作原理!排序...有时可以工作,但在其他时间,而不是问我是否要下载CSV文件,它只是将文件发送到浏览器窗口。
在asp端,我传递响应对象,表和csv文件名。
<%
Dim xls_fn As String = "test01.csv"
'OLEDB call to fill up 'tbl' ... this works.
sendTableAsCSVtoClient(response, tbl, xls_fn)
%>
在文件clsCommon.vb,我有以下代码:
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
- 是什么造成的?
- 我该如何解决它?
我猜数据源是一个表并不重要。 请注意,该文件是即时创建的,并且从不存在于服务器的文件系统中。
TX, TFF
废话很快。我很尴尬地说,我盯着这个东西多久了。礼节点:我是否应该删掉整个问题太愚蠢? – elbillaf 2011-03-11 19:44:54
@TheFallibleFiend - 没有问题是愚蠢的,其他人也可能有这个问题。将问题留给其他人寻找并学习。 – Oded 2011-03-11 19:46:32