国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

使用ADO.NET2.0提升數據交互性能(3)

2019-11-18 16:46:04
字體:
來源:轉載
供稿:網友

四:使用SqlBulkCopy批量裝載數據(僅限SqlClient)

    以往訪問 SQL Server 2000 時,若有大量的數據記錄需要添加到數據庫內,例如從主機系統或是 NCR Teradata、Oracle等數據庫系統下載大量數據記錄,我們想要將它們快速添加到 SQL Server 2000中,可以有的選擇是調用 T-SQL 的 Bulk Insert 語法、通過Linked Server 執行 SELECT INTO 語法或是執行 bcp.exe 工具程序,以及通過 DTS 的 Bulk Insert Task 或啟動Transform Data Task 的快速裝載(Use Fast Load)設置。


但若要通過自行編寫的程序完成批次裝載,只能以 C/C++ 調用 OLEDB 或 ODBC 的 Bulk API,無法通過 ADO.NET 或 ADO 等對象來執行。

    ADO.NET 2.0 的 SqlClient 提供了一個新的類稱為 SqlBulkCopy,它讓 DataSet 內大量的數據或是 DataReader通過數據流(Stream)直接讀取大量的記錄,可以快速將這些記錄添加到目的數據庫的數據表中。但要注意的是它并非如我們一般用的 bcp.exe工具程序,可以從某個符號分隔文件讀取大量數據,選擇性地搭配格式文件(Format File)將記錄裝載到數據庫中,或是將數據庫內的數據導出成為一個文件。但由于DataSet 能集成 xml 數據,因此依然可以采用 SqlBulkCopy 類型,輕松地通過 DataSet 將 XML 文件數據大量轉入到數據庫。

 

可以利用SqlBulkCopy類快速寫入大批量數據,針對SQL Server的優化,可以寫入DataRow數據,DataTable,DataReader,并且可以映射不同的數據列名

  WriteToServer(DataTable)寫入數據表

  WriteToServer(DataRow[])批次寫入數據行

  WriteToServer(DataTable ,DataRowState)按行狀態寫入數據庫表

  WriteToServer(IDataReader)寫入DataReader對象


下面是個示例:

using (SqlConnection sqlcon =

  new SqlConnection("Data Source=192.168.80.242;user id=oa;passWord=oapassword;initial catalog=test"))

   {

  sqlcon.Open();

  using (SqlBulkCopy bcp = new SqlBulkCopy(sqlcon))

  {

 bcp.BulkCopyTimeout = 3000;

 bcp.DestinationTableName = "dbo.Test01";

 bcp.ColumnMappings.Add("id", "id");

 bcp.ColumnMappings.Add("name1", "name1");

 bcp.ColumnMappings.Add("name2", "name2");

 bcp.ColumnMappings.Add("name3", "name3");

    //映射到不同名列

 bcp.ColumnMappings.Add("changedname4", "name4");

 bcp.WriteToServer(dt);

 sqlcon.Close();

  }

   }

 
但是SqlBulkCopy使用時要注意以下幾點:

1.確認確實需要大容量更新在執行此操作,(幾十行的數據請盡量使用別的渠道把).

2.

3.確認數據一致性,與檢查機制,以免遇到主鍵沖突,數據不符格式等意外。

4.

3.SqlBulkCopy操作可能會導致對目標表元數據的更改(例如,禁用約束檢查時)。如果出現這種情況,訪問大容量插入表的并發快照隔離事務將失敗。

4. SqlBulkCopy將向數據庫下大容量更新鎖,請注意并發性,以免其他連接因長時間等待而超時。

http://m.survivalescaperooms.com/trisaeyes/archive/2006/12/30/608075.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平昌县| 曲阜市| 蒲江县| 沙河市| 宁都县| 东乡族自治县| 大渡口区| 永福县| 铜山县| 财经| 阳谷县| 延川县| 图片| 健康| 石门县| 弥勒县| 仪陇县| 沅陵县| 东宁县| 临洮县| 凤山县| 冀州市| 习水县| 武义县| 邯郸市| 万宁市| 吐鲁番市| 姜堰市| 常宁市| 临城县| 延庆县| 普兰店市| 灵宝市| 甘孜县| 英德市| 黔西县| 镇巴县| 黔西县| 平南县| 康马县| 禄劝|