您的位置:首页 > 理论基础 > 计算机网络

利用 HttpRequest 得到 GzipStream ,从而获取远程服务器数据库中的数据

2011-11-20 18:06 429 查看
一般远程服务器上放一个导出(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;
}
}
}
}
}


谢谢浏览!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: