利用 HttpRequest 得到 GzipStream ,从而获取远程服务器数据库中的数据
2011-11-20 18:06 音乐让我说 阅读(423) 评论(0) 收藏 举报一般远程服务器上放一个导出(Export.aspx)页面,本地服务器上放一个导入(Import.aspx)页面,以实现从远程服务器上获取数据。
直接贴代码了:
Export.aspx
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.IO.Compression;
namespace WebDownloadGzipStream
{
public partial class _Export : System.Web.UI.Page
{
private static readonly string ConnString = ConfigurationManager.ConnectionStrings["exportConnString"].ConnectionString;
private static readonly string ExportPassword = ConfigurationManager.AppSettings["exportPassword"];
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
BeginExport();
}
}
protected void BeginExport()
{
string tableName = Request.QueryString["tableName"];
//这里要验证表是否为空、是否存在,来一个密码更好
string password = Request.QueryString["password"];
if (password != ExportPassword)
{
return;
}
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(ConnString))
{
SqlDataAdapter adapter = new SqlDataAdapter("select * from " + tableName, conn);
adapter.Fill(ds);
}
using (MemoryStream memoryStream = new MemoryStream())
{
ds.WriteXml(memoryStream,XmlWriteMode.WriteSchema);
memoryStream.Seek(0,SeekOrigin.Begin);
using(GZipStream gzip = new GZipStream(Response.OutputStream, CompressionMode.Compress))
{
CopyStream(memoryStream, gzip);
}
}
}
public static void CopyStream(Stream source, Stream target)
{
byte[] buffer = new byte[4096];
int count = source.Read(buffer, 0, 4096);
while(count > 0)
{
target.Write(buffer, 0, count);
count = source.Read(buffer,0, 4096);
}
}
}
}
Import.aspx
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.IO.Compression;
using System.Net;
namespace WebDownloadGzipStream
{
public partial class Import : System.Web.UI.Page
{
private static readonly string ConnString = ConfigurationManager.ConnectionStrings["importConnString"].ConnectionString;
private static readonly string RemoteServerExportUrl = ConfigurationManager.AppSettings["remoteServerExportUrl"];
protected void btnImport_Click(object sender, EventArgs e)
{
string[] tableNames = new string[]
{
"aaa","bbb"
};
foreach (var item in tableNames)
{
BeginImport(item);
}
}
protected void BeginImport(string tableName)
{
DataSet ds = GetDataSetFromRemoteServer(tableName);
using (SqlConnection conn = new SqlConnection(ConnString))
{
conn.Open();
using(SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
{
bulkCopy.DestinationTableName = tableName;
bulkCopy.WriteToServer(ds.Tables[0], DataRowState.Unchanged);
}
}
}
protected DataSet GetDataSetFromRemoteServer(string tableName)
{
HttpWebRequest wr = WebRequest.Create(RemoteServerExportUrl) as HttpWebRequest;
using(Stream s = (wr.GetResponse() as HttpWebResponse).GetResponseStream())
{
using(GZipStream gzip = new GZipStream(s,CompressionMode.Decompress))
{
DataSet ds = new DataSet();
ds.ReadXml(gzip);
ds.AcceptChanges();
return ds;
}
}
}
}
}
谢谢浏览!
作者:音乐让我说(音乐让我说 - 博客园)
出处:http://music.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
浙公网安备 33010602011771号