websivers3
using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.IO;
using System.IO.Compression;
using System.Data.SqlClient;
using System.Runtime.Serialization.Formatters.Binary;
namespace AsynWebService
{
/// <summary>
/// Service1 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class AsynWebService : System.Web.Services.WebService
{
[WebMethod(Description = "复制表数据表数据库表")]
public string CopyDataTable(string Pub_CnnD, string DestTableName, byte[] ZipByte)
{
byte[] buffer = UnZipClass.Decompress(ZipByte);
BinaryFormatter ser = new BinaryFormatter();
DataSetSurrogate dss;
dss = (DataSetSurrogate)ser.Deserialize(new MemoryStream(buffer));
DataSet DS = dss.ConvertToDataSet();
int RowNum;
RowNum = DS.Tables[0].Rows.Count;
bool Result = DataTableFillToDb(Pub_CnnD, DestTableName, DS.Tables[0]);
DS.Clear();
DS.Reset();
GC.Collect();
if (Result == true)
{
return "复制表:" + DestTableName + " 的数据到远程数据成功!记录数为:" + RowNum.ToString();
}
else
{
return "复制表:" + DestTableName + " 的数据到远程数据失败!";
}
}
/// <summary>
/// 表存在的DataTable填充
/// </summary>
/// <param name="Pub_CnnD">数据库联结串</param>
/// <param name="DestTableName">目标表名</param>
/// <param name="SouseDataTable">源DataTable</param>
/// <returns></returns>
private bool DataTableFillToDb(string Pub_CnnD, string DestTableName, DataTable SouseDataTable)
{
try
{
if (SouseDataTable.Rows.Count > 0)
{
SqlConnection SqlCnn = new SqlConnection(Pub_CnnD);
SqlCnn.Open();
DataTable NewTable = OrdinalTable(Pub_CnnD, SouseDataTable, SouseDataTable.TableName);
SqlBulkCopy Bcp = new SqlBulkCopy(SqlCnn);
Bcp.DestinationTableName = DestTableName;
Bcp.WriteToServer(NewTable);
Bcp.Close();
SqlCnn.Close();
}
SouseDataTable.Reset();
SouseDataTable.Dispose();
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 调整表字段顺序
/// </summary>
/// <param name="SqlConnstring">数据库联结串</param>
/// <param name="DTS">源DataTable</param>
/// <param name="TableName">表名</param>
/// <returns></returns>
private DataTable OrdinalTable(string SqlConnstring, DataTable DTS, string TableName)
{
try
{
System.Data.SqlClient.SqlConnection SqldbCnn = new System.Data.SqlClient.SqlConnection(SqlConnstring);
DataTable DTD = new DataTable();
System.Data.SqlClient.SqlDataAdapter SqlDbDA = new System.Data.SqlClient.SqlDataAdapter("select top 1 * from " + TableName, SqldbCnn);
SqldbCnn.Open();
SqlDbDA.Fill(DTD);
SqlDbDA.Dispose();
SqldbCnn.Close();
DTD.Clear();
int I = 0;
int J = 0;
string CNS = "";
string CND = "";
int MaxCol = 0;
for (I = 0; I <= DTS.Columns.Count - 1; I++)
{
CNS = DTS.Columns[I].ColumnName;
for (J = 0; J <= DTD.Columns.Count - 1; J++)
{
CND = DTD.Columns[J].ColumnName;
if (CND.ToUpper() == CNS.ToUpper())
{
if (MaxCol < J)
{
MaxCol = J;
break;
}
}
}
}
for (J = 0; J <= MaxCol; J++)
{
if (DTS.Columns.IndexOf(DTD.Columns[J].ColumnName) < 0)
{
DTS.Columns.Add(DTD.Columns[J].ColumnName.ToUpper(), DTD.Columns[J].DataType);
}
}
for (I = 0; I <= DTD.Columns.Count - 1; I++)
{
CND = DTD.Columns[I].ColumnName;
for (J = 0; J <= DTS.Columns.Count - 1; J++)
{
CNS = DTS.Columns[J].ColumnName;
if (CNS.ToUpper() == CND.ToUpper())
{
DTS.Columns[J].SetOrdinal(I);
break;
}
}
}
return DTS;
}
catch
{
return DTS;
}
}
}
}
浙公网安备 33010602011771号