成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

VB.NET線程訪問數(shù)據(jù)庫實(shí)用技巧分享

開發(fā) 后端
我們?cè)谶@篇文章中給出了4個(gè)步驟來對(duì)VB.NET線程訪問數(shù)據(jù)庫這一操作方法進(jìn)行詳細(xì)解讀,希望能夠幫助又需要的朋友解決些問題。

大家通過對(duì)VB.NET編程語言的學(xué)習(xí)之后,可以知道,它在對(duì)數(shù)據(jù)庫方面的應(yīng)用時(shí)很靈活的。比如今天為大家介紹的VB.NET線程訪問數(shù)據(jù)庫的相關(guān)方法,就可以一種靈活方便的方式來實(shí)現(xiàn)。#t#

線程是操作系統(tǒng)分配處理器時(shí)間的基本單元,線程可以在單個(gè)執(zhí)行線程執(zhí)行的同時(shí)運(yùn)行多個(gè)活動(dòng),支持搶先多任務(wù)處理的操作系統(tǒng)可以創(chuàng)建多個(gè)線程并通過時(shí)間片輪轉(zhuǎn)的方式使它們同時(shí)運(yùn)行。在需要良好用戶交互的應(yīng)用以及與網(wǎng)絡(luò)和數(shù)據(jù)庫進(jìn)行通訊的應(yīng)用中,使用多線程能提供良好的交互體驗(yàn),能對(duì)用戶的要求做出快速的反應(yīng)。本文主要介紹.NET中的線程在數(shù)據(jù)庫編程中的具體應(yīng)用(用VB.NET實(shí)現(xiàn))。

VB.NET線程訪問數(shù)據(jù)庫1 創(chuàng)建數(shù)據(jù)庫訪問線程

在數(shù)據(jù)庫應(yīng)用中,特別是網(wǎng)絡(luò)數(shù)據(jù)庫訪問,因?yàn)榭赡芤L問的數(shù)據(jù)量較大,因此需要比較長(zhǎng)的時(shí)間來得到結(jié)果,而一個(gè)良好的程序應(yīng)具有良好的交互性,在訪問數(shù)據(jù)庫時(shí)應(yīng)允許你的應(yīng)用程序?qū)τ脩舻幕顒?dòng)盡快做出響應(yīng),以提供豐富的用戶體驗(yàn)。利用多線程機(jī)制可以讓需要大量時(shí)間的操作在后臺(tái)運(yùn)行以快速響應(yīng)用戶的活動(dòng)。下面的代碼訪問數(shù)據(jù)庫并返回?cái)?shù)據(jù)表:

  1. Private sub GetData
    FromDataBase()  
  2. …  
  3. m_table.Clear()  
  4. m_sqlDataAdapter.
    Fill(m_table)  
  5. …  
  6. End Sub 

創(chuàng)建Thread對(duì)象的新實(shí)例,需創(chuàng)建新的線程代理.ThreadStart線程代理可以指定生成線程時(shí)要執(zhí)行的方法名,但線程代理并不實(shí)際運(yùn)行線程.創(chuàng)建ThreadStart對(duì)象時(shí),需指定線程開始執(zhí)行時(shí)要運(yùn)行的方法的指針,該方法不能接受任何參數(shù)。下面我們將上面的代碼分配給一個(gè)線程處理,并且啟動(dòng)它:

  1. Dim myThreadStart as ThreadStart
     =New ThreadStart(AddressOf 
    GetDataFromDataBase)  
  2. Dim myThread as Thread=New 
    Thread(myThreadStart)  
  3. myThread.Start() 

這樣當(dāng)進(jìn)行數(shù)據(jù)庫的訪問時(shí),用戶可以繼續(xù)進(jìn)行處理。

VB.NET線程訪問數(shù)據(jù)庫2 將數(shù)據(jù)庫訪問方法封裝到類

上面提到,線程要執(zhí)行的方法不能接受任何參數(shù),如果要傳入方法特定條件,可以將方法放在一個(gè)類中,在類中定義類的屬性,需要時(shí)可以設(shè)置類的屬性,然后用方法調(diào)用這些屬性以實(shí)現(xiàn)方法參數(shù)類似的功能。同時(shí),因?yàn)樯傻木€程在主應(yīng)用程序線程之外運(yùn)行,.NET Framework提供線程隔離,這時(shí)如果要用新的線程操縱主應(yīng)用程序中的對(duì)象便不被允許。***的辦法也是將線程要訪問的對(duì)象包裝在類中。下面我們創(chuàng)建一個(gè)類,封裝屬性和數(shù)據(jù)庫訪問方法:

  1. Public Class dealDataBase  
  2. Private m_sqlDataAdapter As 
    SqlDataAdapter  
  3. Private m_table As DataTable  
  4. Public Property setDataAdapter()
     As SqlDataAdapter  
  5. Get  
  6. setDataAdapter=m_sqlDataAdapter 
  7. End Get  
  8. Set(ByVal value As SqlDataAdapter)  
  9. m_sqlDataAdapter=value 
  10. End Set  
  11. End Property  
  12. Public Property setDataTable() 
    As DataTable  
  13. Get  
  14. setDataTable=m_table 
  15. End Get  
  16. Set(ByVal value As DataTable)  
  17. m_DataTable=value 
  18. End Set  
  19. End Property  
  20. Public sub GetDataFromDataBase()  
  21. …  
  22. m_table.Clear()  
  23. m_sqlDataAdapter.Fill(m_table)  
  24. …  
  25. End Sub  
  26. End Class  

下面是創(chuàng)建線程并運(yùn)行線程的代碼:

  1. Dim myDB As New dealDataBase ()  
  2. Dim myThreadStart as ThreadStart  
  3. Dim myThread as Thread  
  4. myDB.setDataAdapter=Me.DataAdapter1
     'DataAdapter1是本窗體內(nèi)定義的數(shù)據(jù)適配器  
  5. myDB.setDataTable=Me.DataTable1 
    'DataTable1是本窗體定義的數(shù)據(jù)表  
  6. …  
  7. myThreadStart=New ThreadStart
    (AddressOf myDB.GetDataFromDataBase)  
  8. myThread=New Thread(myThreadStart)  
  9. myThread.Start()  
  10. …  
  11. End Sub 

VB.NET線程訪問數(shù)據(jù)庫3 使用事件

調(diào)用了線程的start方法,并不能確保其中的方法馬上執(zhí)行完,而要得到數(shù)據(jù)訪問的結(jié)果又必須等其中的方法執(zhí)行完畢。如果在運(yùn)行線程后采用循環(huán)查詢的方法顯然影響了交互性,事件是從線程方法返回?cái)?shù)據(jù)的好方法。只要在線程方法所在的類中定義一個(gè)事件,在線程方法中發(fā)出事件,而在窗體類中生成代理。
首先在dealDataBase類聲明后加進(jìn)事件:

 

  1. Public Class dealDataBase  
  2. Public Event GetDataComplete
    (ByVal e As DtatTable)  
  3. …  
  4. End Class  
  5. 在類dealDataBase的GetDataFromDataBase()
    方法中加入發(fā)出事件的代碼,放在
    m_sqlDataAdapter.Fill(m_table)后:  
  6. Public sub GetDataFromDataBase()  
  7. …  
  8. m_sqlDataAdapter.Fill(m_table)  
  9. RasiseEvent GetDataComplete(m_table)  
  10. …  
  11. End Sub  

下面在窗體類中生成代理

 

  1. Private Sub dealData 
    (ByVal e As DataTable)  
  2. '處理數(shù)據(jù)表  
  3. End Sub  

在創(chuàng)建線程并運(yùn)行線程的代碼中進(jìn)行事件連接,事件連接代碼放在運(yùn)行線程前, dealDataBase類實(shí)例化后:

  1. AddHandler myDB. 
    GetDataComplete,AddressOf
     dealData   

這樣,當(dāng)線程方法執(zhí)行完畢就會(huì)發(fā)出事件,而dealData方法會(huì)響應(yīng)事件并做出處理。

VB.NET線程訪問數(shù)據(jù)庫4 同步機(jī)制

當(dāng)多個(gè)線程需要共享相同的對(duì)象時(shí),因?yàn)槊總€(gè)線程都能改變對(duì)象的狀態(tài),因此會(huì)互相破壞對(duì)方的執(zhí)行。為防止多個(gè)線程同時(shí)訪問共享對(duì)象就需要同步。.Net框架使用SyncLock…End SyncLock標(biāo)識(shí)限制線程訪問的代碼段。 SyncLock可得到一個(gè)對(duì)象引用的唯一鎖,只要將該對(duì)象傳送給SyncLock.通過得到這個(gè)唯一鎖,你可以確保多個(gè)線程不會(huì)訪問共享的數(shù)據(jù).比如要防止數(shù)據(jù)表DataTable1被多個(gè)進(jìn)程同時(shí)訪問,可以對(duì)要處理DataTable1的代碼做如下處理:

  1. SyncLock(DataTable1)  
  2. '處理DataTable1數(shù)據(jù)表的代碼  
  3. End SyncLock  

5 總結(jié)

VB.NET線程訪問數(shù)據(jù)庫的使用可以提高程序的效率和提供對(duì)用戶活動(dòng)的快速響應(yīng)。但線程的使用比較復(fù)雜,并有死鎖的可能,因此使用多線程一定要詳細(xì)考慮資源的要求和潛在的沖突。

責(zé)任編輯:曹凱 來源: pcppc.cn
相關(guān)推薦

2010-01-14 10:18:24

VB.NET List

2010-01-14 18:00:07

VB.NET串行化對(duì)象

2010-01-15 19:24:42

2009-10-29 17:33:51

VB.NET線程方法

2009-11-11 11:33:08

VB.NET線程訪問數(shù)

2009-10-29 17:45:24

VB.NET線程

2009-10-28 16:47:26

VB.NET訪問數(shù)據(jù)庫

2010-01-22 11:02:30

VB.NET創(chuàng)建新變量

2010-01-13 15:52:59

VB.NET浮動(dòng)窗體

2010-01-18 16:33:57

VB.NET加密文件

2010-01-18 18:06:07

VB.NET多線程

2010-01-18 18:50:26

VB.NET鼠標(biāo)手勢(shì)

2010-01-15 19:04:09

2009-10-23 09:26:09

VB.NET多線程

2010-01-07 17:24:12

VB.NET連接數(shù)據(jù)庫

2010-01-14 16:04:32

VB.NET顯示時(shí)間

2010-01-18 16:41:47

VB.NET用戶登錄頁

2010-01-18 10:26:19

VB.NET中心旋轉(zhuǎn)圖

2010-01-11 15:31:04

VB.NET拖動(dòng)窗體

2010-01-07 13:40:50

VB.NET讀取XML
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美电影免费观看高清 | 天堂综合网 | 午夜精品久久久久久 | 欧美精品久久久久久久久久 | 成人精品一区二区三区 | 欧美日韩亚洲国产 | 国产亚洲精品久久久优势 | 日韩图区 | 久久中文字幕av | 国产免费高清 | 国产成人一区二区三区 | 亚洲精品九九 | 午夜视频在线观看视频 | 精品一区二区在线观看 | 免费三级黄 | 久久精品在线播放 | 中国人pornoxxx麻豆 | 久久精品青青大伊人av | 亚洲欧美一区二区三区视频 | 国产综合在线视频 | 欧美精品日韩精品 | 亚洲一区免费视频 | 人人艹人人爽 | 嫩草视频入口 | 美女张开腿露出尿口 | av片免费 | 不卡视频一区二区三区 | 一区二区中文 | 亚洲视频区 | 久久精品亚洲国产奇米99 | 中文字幕国产日韩 | 国产精品久久国产愉拍 | 亚洲国产激情 | 久久精品国产免费一区二区三区 | 国产精品一区网站 | 欧美成人一区二区 | 成人一区二区在线 | 中文字幕在线观看一区 | 国产偷久久一级精品60部 | 久久国产电影 | 精品一区二区三区四区在线 |