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()));
}