這篇文章將為大家詳細(xì)講解有關(guān)如何使用ADO.NET數(shù)據(jù)庫,小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出祿豐免費(fèi)做網(wǎng)站回饋大家。
以往訪問 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)直接讀取大量的記錄,可以快速將這些記錄添加到目的ADO.NET數(shù)據(jù)庫的數(shù)據(jù)表中。但要注意的是它并非如我們一般用的 bcp.exe工具程序,可以從某個符號分隔文件讀取大量數(shù)據(jù),選擇性地搭配格式文件(Format File)將記錄裝載到ADO.NET數(shù)據(jù)庫中,或是將數(shù)據(jù)庫內(nèi)的數(shù)據(jù)導(dǎo)出成為一個文件。但由于DataSet 能集成 XML 數(shù)據(jù),因此依然可以采用 SqlBulkCopy 類型,輕松地通過 DataSet 將 XML 文件數(shù)據(jù)大量轉(zhuǎn)入到ADO.NET數(shù)據(jù)庫。
可以利用SqlBulkCopy類快速寫入大批量數(shù)據(jù),針對SQL Server的優(yōu)化,可以寫入DataRow數(shù)據(jù),DataTable,DataReader,并且可以映射不同的數(shù)據(jù)列名
◆WriteToServer(DataTable)寫入數(shù)據(jù)表
◆WriteToServer(DataRow[])批次寫入數(shù)據(jù)行
◆WriteToServer(DataTable ,DataRowState)按行狀態(tài)寫入數(shù)據(jù)庫表
◆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使用時要注意以下幾點(diǎn):
1 確認(rèn)確實(shí)需要大容量更新在執(zhí)行此操作,(幾十行的數(shù)據(jù)請盡量使用別的渠道把).
2確認(rèn)數(shù)據(jù)一致性,與檢查機(jī)制,以免遇到主鍵沖突,數(shù)據(jù)不符格式等意外。
3 SqlBulkCopy操作可能會導(dǎo)致對目標(biāo)表元數(shù)據(jù)的更改(例如,禁用約束檢查時)。如果出現(xiàn)這種情況,訪問大容量插入表的并發(fā)快照隔離事務(wù)將失敗。
4 SqlBulkCopy將向數(shù)據(jù)庫下大容量更新鎖,請注意并發(fā)性,以免其他連接因長時間等待而超時。
關(guān)于“如何使用ADO.NET數(shù)據(jù)庫”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。