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

VB.NET線程訪問數據庫實用技巧分享

開發 后端
我們在這篇文章中給出了4個步驟來對VB.NET線程訪問數據庫這一操作方法進行詳細解讀,希望能夠幫助又需要的朋友解決些問題。

大家通過對VB.NET編程語言的學習之后,可以知道,它在對數據庫方面的應用時很靈活的。比如今天為大家介紹的VB.NET線程訪問數據庫的相關方法,就可以一種靈活方便的方式來實現。#t#

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

VB.NET線程訪問數據庫1 創建數據庫訪問線程

在數據庫應用中,特別是網絡數據庫訪問,因為可能要訪問的數據量較大,因此需要比較長的時間來得到結果,而一個良好的程序應具有良好的交互性,在訪問數據庫時應允許你的應用程序對用戶的活動盡快做出響應,以提供豐富的用戶體驗。利用多線程機制可以讓需要大量時間的操作在后臺運行以快速響應用戶的活動。下面的代碼訪問數據庫并返回數據表:

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

創建Thread對象的新實例,需創建新的線程代理.ThreadStart線程代理可以指定生成線程時要執行的方法名,但線程代理并不實際運行線程.創建ThreadStart對象時,需指定線程開始執行時要運行的方法的指針,該方法不能接受任何參數。下面我們將上面的代碼分配給一個線程處理,并且啟動它:

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

這樣當進行數據庫的訪問時,用戶可以繼續進行處理。

VB.NET線程訪問數據庫2 將數據庫訪問方法封裝到類

上面提到,線程要執行的方法不能接受任何參數,如果要傳入方法特定條件,可以將方法放在一個類中,在類中定義類的屬性,需要時可以設置類的屬性,然后用方法調用這些屬性以實現方法參數類似的功能。同時,因為生成的線程在主應用程序線程之外運行,.NET Framework提供線程隔離,這時如果要用新的線程操縱主應用程序中的對象便不被允許。***的辦法也是將線程要訪問的對象包裝在類中。下面我們創建一個類,封裝屬性和數據庫訪問方法:

  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  

下面是創建線程并運行線程的代碼:

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

VB.NET線程訪問數據庫3 使用事件

調用了線程的start方法,并不能確保其中的方法馬上執行完,而要得到數據訪問的結果又必須等其中的方法執行完畢。如果在運行線程后采用循環查詢的方法顯然影響了交互性,事件是從線程方法返回數據的好方法。只要在線程方法所在的類中定義一個事件,在線程方法中發出事件,而在窗體類中生成代理。
首先在dealDataBase類聲明后加進事件:

 

  1. Public Class dealDataBase  
  2. Public Event GetDataComplete
    (ByVal e As DtatTable)  
  3. …  
  4. End Class  
  5. 在類dealDataBase的GetDataFromDataBase()
    方法中加入發出事件的代碼,放在
    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. '處理數據表  
  3. End Sub  

在創建線程并運行線程的代碼中進行事件連接,事件連接代碼放在運行線程前, dealDataBase類實例化后:

  1. AddHandler myDB. 
    GetDataComplete,AddressOf
     dealData   

這樣,當線程方法執行完畢就會發出事件,而dealData方法會響應事件并做出處理。

VB.NET線程訪問數據庫4 同步機制

當多個線程需要共享相同的對象時,因為每個線程都能改變對象的狀態,因此會互相破壞對方的執行。為防止多個線程同時訪問共享對象就需要同步。.Net框架使用SyncLock…End SyncLock標識限制線程訪問的代碼段。 SyncLock可得到一個對象引用的唯一鎖,只要將該對象傳送給SyncLock.通過得到這個唯一鎖,你可以確保多個線程不會訪問共享的數據.比如要防止數據表DataTable1被多個進程同時訪問,可以對要處理DataTable1的代碼做如下處理:

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

5 總結

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

責任編輯:曹凱 來源: pcppc.cn
相關推薦

2010-01-14 10:18:24

VB.NET List

2010-01-14 18:00:07

VB.NET串行化對象

2010-01-15 19:24:42

2009-10-29 17:33:51

VB.NET線程方法

2009-11-11 11:33:08

VB.NET線程訪問數

2009-10-29 17:45:24

VB.NET線程

2009-10-28 16:47:26

VB.NET訪問數據庫

2010-01-22 11:02:30

VB.NET創建新變量

2010-01-13 15:52:59

VB.NET浮動窗體

2010-01-18 16:33:57

VB.NET加密文件

2010-01-15 19:04:09

2010-01-18 18:50:26

VB.NET鼠標手勢

2010-01-18 18:06:07

VB.NET多線程

2009-10-23 09:26:09

VB.NET多線程

2010-01-07 17:24:12

VB.NET連接數據庫

2010-01-14 16:04:32

VB.NET顯示時間

2010-01-18 16:41:47

VB.NET用戶登錄頁

2010-01-18 10:26:19

VB.NET中心旋轉圖

2010-01-11 15:31:04

VB.NET拖動窗體

2010-01-07 13:40:50

VB.NET讀取XML
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色一级大片视频 | 欧美另类视频 | 国产成人亚洲精品自产在线 | 九九精品网 | 三级黄色片在线 | 欧美另类视频 | 黄色片在线 | 精品国产一区二区三区久久久四川 | 九七午夜剧场福利写真 | 小h片免费观看久久久久 | 日日摸日日添日日躁av | 激情欧美日韩一区二区 | 久久成人久久 | 亚洲天堂精品久久 | 天天干天天爽 | 在线一区二区观看 | 久久久久久国产精品免费免费狐狸 | 久久中文视频 | 91视频大全 | 一区二视频 | 久久国产激情视频 | 久久久久亚洲精品 | 亚洲国产视频一区 | 日韩免费一区 | 国产探花在线精品一区二区 | 久久精品网 | 91精品国产乱码久久久久久久 | 狠狠干狠狠操 | 欧美99 | 久久综合888 | 日干夜干 | 日本一区二区视频 | 日韩精品在线免费观看视频 | 欧美日韩一 | 成人高潮片免费视频欧美 | 国产网站在线播放 | 在线观看av网站永久 | www日韩欧美 | 亚洲精品亚洲人成人网 | 久久久www成人免费无遮挡大片 | 美美女高清毛片视频免费观看 |