string strConnection = ConfigurationManager.AppSettings["conStr"].ToString();//读取Web.config文件中的数据库链接字符串
SqlConnection sourceconnection = new SqlConnection(strConnection);//数据的链接方式是SQL Server
sourceconnection.Open();//打开数据库链接
SqlCommand cmd = new SqlCommand("Select * from MSreplication_options");//经过命令来读取SQL语句
cmd.Connection = sourceconnection;//获取链接方式
SqlDataReader reader = cmd.ExecuteReader();//开始执和结果集,获取DataReader记录集
//链接目标数据库链接,而且打开数据库链接方式,在此因为调用同一个数据库,链接字符串没有变
SqlConnection destinationConnection = new SqlConnection(strConnection);
destinationConnection.Open();
//调用SqlBulkCopy类的方法
SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection);
//获取目标表的名称
bulkCopy.DestinationTableName = "destination";
//写入DataReader对象
bulkCopy.WriteToServer(reader);
//关闭各个对象
reader.Close();
sourceconnection.Close();
destinationConnection.Close();
ID (OrderID): int
Name (ShipName): nvarchar(40)
Address (ShipAddress): nvarchar(60)
City (ShipCity): nvarchar(15)
而后在Northwind数据中建立一个存储过程,以下:
CREATE PROCEDURE dbo.SelectOrders
AS
SELECT OrderID, ShipName, ShipAddress, ShipCity
FROM Orders
private void btnStart_Click(object sender, EventArgs e)
{
String sourceConnectionString =
"Data Source=127.0.0.1;Initial Catalog=Northwind;Integrated Security=True";
String destinationConnectionString =
"Data Source=127.0.0.1;;Initial Catalog=SqlBulkCopySample;Integrated Security=True";
DataTable data = SelectDataFromSource(sourceConnectionString);//获取数据
CopyDataToDestination(destinationConnectionString, data);//复制数据
}
private DataTable SelectDataFromSource(String connectionString)
{
DataTable data = new DataTable();
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand("SelectOrders", connection);
command.CommandType = CommandType.StoredProcedure;
connection.Open();
SqlDataReader reader = command.ExecuteReader();
data.Load(reader);
}
return data;
}
private void CopyDataToDestination(String connectionString, DataTable table)
{
SqlBulkCopyColumnMapping mapping1 =
new SqlBulkCopyColumnMapping("OrderID", "ID");
SqlBulkCopyColumnMapping mapping2 =
new SqlBulkCopyColumnMapping("ShipName", "Name");
SqlBulkCopyColumnMapping mapping3 =
new SqlBulkCopyColumnMapping("ShipAddress", "Address");
SqlBulkCopyColumnMapping mapping4 =
new SqlBulkCopyColumnMapping("ShipCity", "City");
SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString);
bulkCopy.BatchSize = 100;
bulkCopy.BulkCopyTimeout = 5;
bulkCopy.ColumnMappings.Add(mapping1);
bulkCopy.ColumnMappings.Add(mapping2);
bulkCopy.ColumnMappings.Add(mapping3);
bulkCopy.ColumnMappings.Add(mapping4);
bulkCopy.DestinationTableName = "tblOrder";
bulkCopy.SqlRowsCopied +=
new SqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);
bulkCopy.NotifyAfter = 200;
bulkCopy.WriteToServer(table);
}
private void bulkCopy_SqlRowsCopied(object sender, SqlRowsCopiedEventArgs e)
{
MessageBox.Show
(String.Format("{0} Rows have been copied.", e.RowsCopied.ToString()));
}
private DataTable SelectDataFromSource(String connectionString)
{
DataTable data = new DataTable();
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand("SelectOrders", connection);
command.CommandType = CommandType.StoredProcedure;
connection.Open();
SqlDataReader reader = command.ExecuteReader();
data.Load(reader);
}
return data;
}
private void CopyDataToDestination(String connectionString, DataTable table)
{
SqlBulkCopyColumnMapping mapping1 =
new SqlBulkCopyColumnMapping("OrderID", "ID");
SqlBulkCopyColumnMapping mapping2 =
new SqlBulkCopyColumnMapping("ShipName", "Name");
SqlBulkCopyColumnMapping mapping3 =
new SqlBulkCopyColumnMapping("ShipAddress", "Address");
SqlBulkCopyColumnMapping mapping4 =
new SqlBulkCopyColumnMapping("ShipCity", "City");
SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString);
bulkCopy.BatchSize = 100;
bulkCopy.BulkCopyTimeout = 5;
bulkCopy.ColumnMappings.Add(mapping1);
bulkCopy.ColumnMappings.Add(mapping2);
bulkCopy.ColumnMappings.Add(mapping3);
bulkCopy.ColumnMappings.Add(mapping4);
bulkCopy.DestinationTableName = "tblOrder";
bulkCopy.SqlRowsCopied +=
new SqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);
bulkCopy.NotifyAfter = 200;
bulkCopy.WriteToServer(table);
}
private void bulkCopy_SqlRowsCopied(object sender, SqlRowsCopiedEventArgs e)
{
MessageBox.Show
(String.Format("{0} Rows have been copied.", e.RowsCopied.ToString()));
}