使用ADO.NET2.0提升數(shù)據(jù)交互性能(3)_.Net教程
推薦:使用ADO.NET2.0提升數(shù)據(jù)交互性能(2)三:異步執(zhí)行Command命令 在 ADO.NET 2.0 以前,通過 Command 類(如 SqlCommand、OleDbCommand等)執(zhí)行 SQL 命令的線程一定要停下來等待執(zhí)行結(jié)果。ADO.NET 2.0 新增了異步程序訪問接
四:使用SqlBulkCopy批量裝載數(shù)據(jù)(僅限SqlClient)
以往訪問 SQL Server 2000 時,若有大量的數(shù)據(jù)記錄需要添加到數(shù)據(jù)庫內(nèi),例如從主機(jī)系統(tǒng)或是 NCR Teradata、Oracle等數(shù)據(jù)庫系統(tǒng)下載大量數(shù)據(jù)記錄,我們想要將它們快速添加到 SQL Server 2000中,可以有的選擇是調(diào)用 T-SQL 的 Bulk Insert 語法、通過Linked Server 執(zhí)行 SELECT INTO 語法或是執(zhí)行 bcp.exe 工具程序,以及通過 DTS 的 Bulk Insert Task 或啟動Transform Data Task 的快速裝載(Use Fast Load)設(shè)置。
但若要通過自行編寫的程序完成批次裝載,只能以 C/C 調(diào)用 OLEDB 或 ODBC 的 Bulk API,無法通過 ADO.NET 或 ADO 等對象來執(zhí)行。
ADO.NET 2.0 的 SqlClient 提供了一個新的類稱為 SqlBulkCopy,它讓 DataSet 內(nèi)大量的數(shù)據(jù)或是 DataReader通過數(shù)據(jù)流(Stream)直接讀取大量的記錄,可以快速將這些記錄添加到目的數(shù)據(jù)庫的數(shù)據(jù)表中。但要注意的是它并非如我們一般用的 bcp.exe工具程序,可以從某個符號分隔文件讀取大量數(shù)據(jù),選擇性地搭配格式文件(Format File)將記錄裝載到數(shù)據(jù)庫中,或是將數(shù)據(jù)庫內(nèi)的數(shù)據(jù)導(dǎo)出成為一個文件。但由于DataSet 能集成 XML 數(shù)據(jù),因此依然可以采用 SqlBulkCopy 類型,輕松地通過 DataSet 將 XML 文件數(shù)據(jù)大量轉(zhuǎn)入到數(shù)據(jù)庫。
可以利用SqlBulkCopy類快速寫入大批量數(shù)據(jù),針對SQL Server的優(yōu)化,可以寫入DataRow數(shù)據(jù),DataTable,DataReader,并且可以映射不同的數(shù)據(jù)列名
以下為引用的內(nèi)容:
WriteToServer(DataTable)寫入數(shù)據(jù)表 WriteToServer(DataRow[])批次寫入數(shù)據(jù)行 WriteToServer(DataTable ,DataRowState)按行狀態(tài)寫入數(shù)據(jù)庫表 WriteToServer(IDataReader)寫入DataReader對象 |
下面是個示例:
以下為引用的內(nèi)容:
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.確認(rèn)確實需要大容量更新在執(zhí)行此操作,(幾十行的數(shù)據(jù)請盡量使用別的渠道把).
2.
3.確認(rèn)數(shù)據(jù)一致性,與檢查機(jī)制,以免遇到主鍵沖突,數(shù)據(jù)不符格式等意外。
4.
3.SqlBulkCopy操作可能會導(dǎo)致對目標(biāo)表元數(shù)據(jù)的更改(例如,禁用約束檢查時)。如果出現(xiàn)這種情況,訪問大容量插入表的并發(fā)快照隔離事務(wù)將失敗。
4. SqlBulkCopy將向數(shù)據(jù)庫下大容量更新鎖,請注意并發(fā)性,以免其他連接因長時間等待而超時。
分享:使用ADO.NET2.0提升數(shù)據(jù)交互性能(1)前言: 這篇文章起源于在公司寫的一個PPT,但是由于PPT本身的限制很多內(nèi)容無法表達(dá)或是詳細(xì)的解釋,于是變下定了決心。寫篇文檔! 在這篇文章里我將盡量簡單的描述下ADO.NET 2.0的新特
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實例(可帶附件)
- js實現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實現(xiàn)
- Asp.Net 無刷新文件上傳并顯示進(jìn)度條的實現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(連接字符串的配置及獲取)
- asp.net頁面?zhèn)髦禍y試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現(xiàn)分頁示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- 淺談.net程序員,該不該學(xué)IL?
- .net 中的SqlConnection連接池機(jī)制詳解
- DataGrid的多行提交
- 解讀26個ASP.Net開發(fā)新手的常見問題
- C#中調(diào)用Windows API時的數(shù)據(jù)類型對應(yīng)關(guān)系
- 揭秘.Net開發(fā)常用十大輔助軟件
- 分析.NET上執(zhí)行多線程應(yīng)該注意的兩點
- 采用Native 引導(dǎo)方式的.Net加密保護(hù)
- 關(guān)于IronPython和C#執(zhí)行速度對比
- 關(guān)于.NET Framework中的設(shè)計模式--應(yīng)用策略模式為List排序
- 相關(guān)鏈接:
- 教程說明:
.Net教程-使用ADO.NET2.0提升數(shù)據(jù)交互性能(3)。