<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      SqlBulkCopy提供了一種將數據復制到Sql Server數據庫表中高性能的方法。SqlBulkCopy 包含一個方法 WriteToServer,它用來從數據的源復制數據到數據的目的地。 WriteToServer方法可以處理的數據類型有DataRow[]數組,DataTable 和 DataReader。 你可以根據不同的情形使用不同的數據類型。SqlBulkCopy其原理是采用了SQL Server的BCP協議進行數據的批量復制。

       

       用法

       

          1、將數據庫中的表復制到另一個數據庫中的表。

          本例將Pubs數據庫的stores表中的資料復制到Northwind數據庫的store表中。這兩個表結構相同。

      復制代碼
      using System.Data;
      using System.Data.SqlClient;
      using System.Configuration;
      
      
              /// <summary>
              /// 數據庫中的表復制到另一個數據庫中的表
              /// </summary>
              private void SqlBulkCopyMethod()
              {
                  try
                  {
                      SqlConnection connetionPub = 
      new SqlConnection(ConfigurationManager.ConnectionStrings["PubsDB"].ConnectionString);
                      using (connetionPub)
                      {
                          SqlCommand commandPub = connetionPub.CreateCommand();
                          using (commandPub)
                          {
                              commandPub.CommandText = "select * from stores";
                              commandPub.CommandType = System.Data.CommandType.Text;
                              connetionPub.Open();
      
                              SqlConnection connectionBulkCopy = 
      new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindDB"].ConnectionString);
                              using (connectionBulkCopy)
                              {
                                  connectionBulkCopy.Open();
                                  SqlDataReader dataReader = commandPub.ExecuteReader();
                                  SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionBulkCopy);
                                  using (bulkCopy)
                                  {
                                      bulkCopy.DestinationTableName = "store";
                                      bulkCopy.WriteToServer(dataReader);
                                  }
                              }
                          }
                      }
      
                  }
                  catch (Exception ex)
                  {
                      throw ex;
                  }
              }
      復制代碼

         

      2、將DataTable中的資料批量插入到數據庫中。

      復制代碼
      using System.Data;
      using System.Data.SqlClient;
      using System.Configuration;
              /// <summary>
              /// 將表中資料批量插入到數據庫
              /// 轉自:http://www.rzrgm.cn/mrliuc/archive/2011/01/18/1938271.html
              /// </summary>
              /// <param name="connectionString"></param>
              /// <param name="TableName"></param>
              /// <param name="dt"></param>
              private void SqlBulkCopyByDatatable(string connectionString, string TableName, DataTable dt)
              {
                  using (SqlConnection conn = new SqlConnection(connectionString))
                  {
                      using (SqlBulkCopy sqlbulkcopy = 
      new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction))
                      {
                          try
                          {
                              sqlbulkcopy.DestinationTableName = TableName;
                              for (int i = 0; i < dt.Columns.Count; i++)
                              {
                                  sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
                              }
                              sqlbulkcopy.WriteToServer(dt);
                          }
                          catch (System.Exception ex)
                          {
                              throw ex;
                          }
                      }
                  }
              }
      復制代碼

       

       

      在博客園中看到下邊文章挺有用處,此處摘過來。原文:http://www.rzrgm.cn/stalwart/archive/2011/01/07/1930207.html

         1、從一個表 復制數據到另一個表

      復制代碼
      using System.Data;
      using System.Data.SqlClient;
      using System.Configuration;
      
              /// <summary>
              /// 從一個表復制到別一個表
              /// </summary>
              private void PerformBulkCopy()
              {
                  string connectionString = @"Server=localhost;Database=Northwind;Trusted_Connection=true";
      
                  // 源 
                  using (SqlConnection sourceConnection = new SqlConnection(connectionString))
                  {
                      SqlCommand myCommand = new SqlCommand("SELECT * FROM Products_Archive", sourceConnection);
                      sourceConnection.Open();
                      SqlDataReader reader = myCommand.ExecuteReader();
      
                      // 目的 
                      using (SqlConnection destinationConnection = new SqlConnection(connectionString))
                      {
                          // 打開連接 
                          destinationConnection.Open();
      
                          using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection.ConnectionString))
                          {
                              bulkCopy.BatchSize = 500;
                              bulkCopy.NotifyAfter = 1000;
                              bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);
                              bulkCopy.DestinationTableName = "Products_Latest";
                              bulkCopy.WriteToServer(reader);
                          }
                      }
                      reader.Close();
                  }
              }
      
              public void bulkCopy_SqlRowsCopied(object obj, SqlRowsCopiedEventArgs e)
              {
                  //執行事件處理方法
              }
      復制代碼
      注意:

              首先,我使用DataReader來從數據庫的表中讀取數據。 Products_Latest是目的表,因為數據要從Products_Archive表復制到Products_Latest表。 bulkCopy對象提供了一個SqlRowCopied事件,在每次處理完NotifyAfter屬性指定的行數時發生。 本例中的意思就是每處理完1000行就觸發一次該事件,因為NotifyAfter被設置成了1000。
             BatchSize屬性是非常重要的,程序性能如何主要就依靠著它。 BatchSize的意思就是同每一批次中的行數,在每一批次結束時,就將該批次中的行發送到數據庫。 我將BatchSize設置成了500,其意思就是reader每讀出500行就將他們發送到數據庫從而執行批量復制的操作。 BatchSize的默認值是“1”,其意思就是把每一行作為一個批次發送到數據庫。設置不同的BatchSize在性能上將給你帶來不同的結果。 你應該根據你的需求進行測試,來決定BatchSize的大小。

       

        2、在不同的映射表之間復制數據
              上面的例子中兩個表具有相同的結構。 有時,你需要在具有不同結構的表之間復制數據。
      復制代碼
      /// <summary>
              /// 不同表之間復制數據
              /// </summary>
              private static void PerformBulkCopyDifferentSchema()
              {
                  string connectionString = @"Server=localhost;Database=Northwind;Trusted_Connection=true";
                  DataTable sourceData = new DataTable();
                  // 源 
                  using (SqlConnection sourceConnection = new SqlConnection(connectionString))
                  {
                      SqlCommand myCommand = new SqlCommand("SELECT TOP 5 * FROM Products_Archive", sourceConnection);
                      sourceConnection.Open();
                      SqlDataReader reader = myCommand.ExecuteReader();
      
                      // 目的
                      using (SqlConnection destinationConnection = new SqlConnection(connectionString))
                      {
                          // 打開連接
                          destinationConnection.Open();
                          using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection.ConnectionString))
                          {
                              bulkCopy.ColumnMappings.Add("ProductID", "ProductID");
                              bulkCopy.ColumnMappings.Add("ProductName", "Name");
                              bulkCopy.ColumnMappings.Add("QuantityPerUnit", "Quantity");
                              bulkCopy.DestinationTableName = "Products_TopSelling";
                              bulkCopy.WriteToServer(reader);
                          }
                      }
                      reader.Close();
                  }
              }
      復制代碼

       

      ColumnMappings集合用于映射源表和目的表之間的列。


       

        3、從XML文件復制數據到數據庫的表中

       

          數據源并不局限于數據庫的表,你也可以使用XML文件做數據源。 這里有一個非常簡單的使用XML文件做數據源進行批量復制操作的例子。

       

      復制代碼
      <?xml version="1.0" encoding="utf-8" ?>
      <Products>
        <Product productID="1" productName="Chai" />
        <Product productID="2" productName="Football" />
        <Product productID="3" productName="Soap" />
        <Product productID="4" productName="Green Tea" />
      </Products>
      復制代碼

       

      復制代碼
      /// <summary>
              /// 使用XML作為數據源
              /// </summary>
              private static void PerformBulkCopyXMLDataSource()
              {
                  string connectionString = @"Server=localhost;Database=Northwind;Trusted_Connection=true";
      
                  DataSet ds = new DataSet();
                  DataTable sourceData = new DataTable();
                  ds.ReadXml(@"C:Products.xml");
                  sourceData = ds.Tables[0];
                  // 目的 
                  using (SqlConnection destinationConnection = new SqlConnection(connectionString))
                  {
                      // 打開連接 
                      destinationConnection.Open();
                      using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection.ConnectionString))
                      {
                          // 列映射
                          bulkCopy.ColumnMappings.Add("productID", "ProductID");
                          bulkCopy.ColumnMappings.Add("productName", "Name");
      
                          bulkCopy.DestinationTableName = "Products_TopSelling";
                          bulkCopy.WriteToServer(sourceData);
                      }
                  }
              }
      復制代碼

       首先把XML文件讀進DataTable,然后再使用SqlBulkCopy類的WriteToServer方法。 因為目的表示是Products_TopSelling,所以我們必須執行列映射。

      Posted on 2022-02-28 19:32  lichen396116416  閱讀(1280)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 开心一区二区三区激情| 亚洲av麻豆aⅴ无码电影| 国产成人午夜福利在线播放| 麻豆a级片| 亚洲偷自拍国综合| 国产精品99久久久久久www| 人妻伦理在线一二三区| 国产主播精品福利午夜二区| 男人猛躁进女人免费播放| 国产精品天干天干综合网| 欧美极品少妇×xxxbbb| 国产精品无码免费播放| 日本久久一区二区免高清| 日产精品一区二区三区免费| 日本阿v片在线播放免费| 国产在视频线在精品视频2020| 国产精品多p对白交换绿帽| 中文字幕日韩精品东京热| 午夜夜福利一区二区三区| 亚洲va久久久噜噜噜久久狠狠 | 国产熟女激情一区二区三区| 少妇熟女久久综合网色欲| 成人无码www在线看免费| 少妇被粗大的猛烈进出动视频 | 日韩在线观看中文字幕| 牡丹江市| 国产性生大片免费观看性| 99久久婷婷国产综合精品青草漫画| 国产精品中文字幕久久| 中文字幕日韩国产精品| 精品国产高清中文字幕| 99久久婷婷国产综合精品青草漫画| 亚洲精中文字幕二区三区| 丰满大爆乳波霸奶| 亚洲欧美激情在线一区| 夜夜爽免费888视频| 国产在线观看网址不卡一区| 色成人精品免费视频| 亚洲av综合色一区二区| 少妇精品亚洲一区二区成人| 精品国产丝袜自在线拍国语|