用法:
ExportDB.asp?sql=select语句&table=表名(可选)&filetype=导出格式(xml,htm,csv,sql)&pid=自动编号字段名(仅当导出sql类型时有用)
程序代码:
<!--#include file='../conn.asp'--> <% '数据库导出记录代码 '来源 http://www.Sumv.Net '用法: 'ExportDB.asp?sql=select语句&tablename=表名(可选)&filetype=导出格式(xml,htm,csv,sql)&pid=自动编号字段名(仅当导出sql类型时有用) dim tablename,filetype,fieldPid sql = request("sql") tablename = request("tablename") filetype = lcase(request("filetype")) fieldPid = request("pid") if fieldPid = "" then fieldPid = "id" end if fieldPid = lcase(fieldPid) if lcase(left(sql,6))<>"select" then Response.write "sql语句必须为select * from [table] where ......." Response.end end if
if tablename = "" then tablename = "数据导出结果" end if
function HTMLEncode(fString) if not isnull(fString) then fString = Server.HTMLEncode(fString) fString = Replace(fString, CHR(10) & CHR(10), "</P><P> ") fString = Replace(fString, CHR(10), "<BR> ") fString = Replace(fString, CHR(9), " ")
HTMLEncode = fString end if end function
function Myreplace(str) if not isnull(str) then fString = Replace(fString,"""", """""") Myreplace = str else Myreplace = "" end if end function
function Myreplace2(str) if not isnull(str) then fString = Replace(fString,"'", "''") Myreplace2 = str else Myreplace2 = "" end if end function
dim def_export_sep,def_export_val def_export_sep = "," def_export_val = """"
Set rs = Conn.Execute(sql) '导出XML文件 if filetype="xml" then Response.contenttype="text/xml" Response.Charset = "gb2312" Response.AddHeader "Content-Disposition", "attachment;filename="&tablename&".xml" Response.write "<?xml version=""1.0"" encoding=""gb2312""?>" & vbnewline Response.write "<root>" strLine="" dim thefield(50) i = 0 For each x in rs.fields thefield(i)=x.name i=i+1 Next While rs.EOF =false strLine= vbnewline&chr(9)&"<row>" k=0 For each x in rs.fields strLine= strLine & vbnewline&chr(9)&chr(9)&"<"&thefield(k)&">" if instr(x.value,"<")>0 or instr(x.value,">")>0 or instr(x.value,"&")>0 or len(x.value)>255 then strLine= strLine &"<![CDATA["& x.value &"]]>" else strLine= strLine & x.value end if strLine= strLine &"</"&thefield(k)&">" k=k+1 Next rs.MoveNext Response.write strLine &vbnewline& chr(9)&"</row>" Wend Response.write vbnewline&"</root>"
'导出sql文件 elseif filetype="sql" then Response.contenttype="text/sql" Response.AddHeader "Content-Disposition", "attachment;filename="&tablename&".sql" strLine="" dim sql_insert For each x in rs.fields if lcase(x.name)<>fieldPid then '如果是自动编号 strLine= strLine & def_export_val & x.name & def_export_val & def_export_sep end if Next strLine = replace(left(strLine,len(strLine)-1),"""","") strLine = "insert into ["&tablename&"] (" & strLine & ") values " sql_insert = strLine 'Response.write strLine & vbnewline 'response.end While rs.EOF =false strLine= "" def_export_val = "'" For each x in rs.fields if lcase(x.name)<>fieldPid then '2004-8-11更新 Null值时无法导出的bug。 x_value = x.value if isnull(x_value) or len(x_value) = 0 then x_value = "" else x_value = replace(x_value,"'","''") end if strLine= strLine & def_export_val & x_value & def_export_val & def_export_sep end if Next rs.MoveNext strLine = left(strLine,len(strLine)-1) Response.write sql_insert & "("& strLine &")*" & vbnewline Wend elseif filetype="csv" then Response.contenttype="text/csv" Response.AddHeader "Content-Disposition", "attachment;filename="&tablename&".csv" strLine="" For each x in rs.fields strLine= strLine & def_export_val & x.name & def_export_val & def_export_sep Next Response.write strLine & vbnewline While rs.EOF =false strLine= "" For each x in rs.fields strLine= strLine & def_export_val & Myreplace(x.value) & def_export_val & def_export_sep Next rs.MoveNext Response.write strLine & vbnewline Wend else if filetype="htm" then'弹出下载html的对话框 Response.contenttype="application/ms-download" Response.AddHeader "Content-Disposition", "attachment;filename="&tablename&".htm" end if %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <META NAME="Author" CONTENT="Sumv,heici"> <META NAME="Description" CONTENT="Power by Sumv.Net"> <title>导出数据 - www.Sumv.Net</title> <style> <!-- body,input,select { font-family: Tahoma; font-size: 8pt } th { font-family: Tahoma; font-size: 8pt;padding:3px;color:#FFFFFF;background-color:#999999;} td { font-family: Tahoma; font-size: 8pt;padding:3px;background-color:#EFEFEF;} --> </style> </head> <BODY style="overflow:auto;" topmargin=2 bgcolor=buttonface>
<form method="post" name=myform> SQL:<input type="text" name="sql" value="<% = sql%>"> 表名:<input type="text" name="tablename" value="<% = tablename %>" size="8"> 导出格式:<select size="1" name="filetype"> <option value="">请选择</option> <option <%if filetype = "htm" then Response.write "selected "%>value="htm">htm</option> <option <%if filetype = "xml" then Response.write "selected "%>value="xml">xml</option> <option <%if filetype = "csv" then Response.write "selected "%>value="csv">csv</option> <option <%if filetype = "sql" then Response.write "selected "%>value="sql">sql</option> </select> 自动编号字段名:<input type="text" name="pid" value="<% = fieldPid%>" size="8"><input type="submit" value="确定"> </form>
<div align="center"> <table border="0" cellpadding="0" cellspacing="1" bgcolor="#000000"> <tr> <% i=0 For each x in rs.fields strLine= strLine &chr(9)&chr(9)&"<th align=""center"">"& x.name &"</th>"& vbnewline Next Response.write strLine&chr(9)&"</tr>"& vbnewline & vbnewline While rs.EOF =false i=i+1 Response.write chr(9)&"<tr>"& vbnewline strLine= "" For each x in rs.fields strLine= strLine &chr(9)&chr(9)&"<td>"& HTMLEncode(x.value) &"</td>"& vbnewline Next rs.MoveNext Response.write strLine Response.write chr(9)&"</tr>"& vbnewline & vbnewline Wend Response.write "</table>"& vbnewline if filetype<>"htm" and filetype<>"xls" and filetype<>"sql" then Response.write "<p style='line-height:160%;'>"&i&"条记录 <a href='?tablename="& tablename &"&pid="& fieldPid &"&filetype=htm&sql="&server.urlencode(sql)&"'>导出HTML</a>" Response.write "|<a href='?tablename="& tablename &"&pid="& fieldPid &"&filetype=csv&sql="&server.urlencode(sql)&"'>导出EXCEL</a>" Response.write "|<a href='?tablename="& tablename &"&pid="& fieldPid &"&filetype=xml&sql="&server.urlencode(sql)&"'>导出XML</a>" Response.write "|<a href='?tablename="& tablename &"&pid="& fieldPid &"&filetype=sql&sql="&server.urlencode(sql)&"'>导出SQL</a>"& vbnewline end if Response.write "<p>Power by <A HREF=""http://www.Sumv.Net"" target=""_blank"">Sumv.Net</A>"& vbnewline Response.write "</div>"& vbnewline Response.write "</BODY>"& vbnewline Response.write "</HTML>"& vbnewline
end if rs.close conn.close Set rs=nothing Set conn=nothing %> |