上色

Code Block

2013年8月2日 星期五

[VB.Net] Using並不包含錯誤處理

如下列程式碼︰
Using cmd As New OleDbCommand("CREATE TABLE [test] ([ID] INTEGER,[Username] VarChar,[UserPwd] VarChar)", CalcdConnection)
  cmd.ExecuteNonQuery()
  cmd.CommandText = "INSERT INTO [test$] VALUES(1,'elmer','password')"
  cmd.ExecuteNonQuery()
End Using
可寫成如下表示︰
Dim cmd As New OleDbCommand("CREATE TABLE [test] ([ID] INTEGER,[Username] VarChar,[UserPwd] VarChar)", CalcdConnection)
Try
  cmd.ExecuteNonQuery()
  cmd.CommandText = "INSERT INTO [test$] VALUES(1,'elmer','password')"
  cmd.ExecuteNonQuery()
Finally
    If cmd <> vbNull Then
        cmd.Dispose()
    End If
End Try
事實上並不包含錯誤處理,也就是Catch區塊;因此需自行添加錯誤處理方式

[Date Structure] Class和Structure

Class是reference type,程式執行時資料儲存在heap中
Structure是Value type,程式執行時資料儲存在stack中

因此在method中使用structure時,事實上是建立該structure的副本,因此改動這個數值並不會影響本來的資料,如︰

Structure TotalTime
  Dim tt As String
End Structure

Dim result(100) as TotalTime '定義result為TotalTime陣列 

For Each a As TotalTime In result
    a.tt=a.tt+1
Next
此時,result陣列中的數值並不會改變,因為Structure是Value type,所以For...Each時是複製一個result的副本。
因此需將result定義為class才可正確獲得預期效果。

但是同樣需要注意的是,因為Class是reference type,必須以New關鍵字一一將陣列中的元素定義為執行個體(物件)

[VB.Net] 讀取Access與Excel資料庫

'Access資料庫之連接位址
Public DBLocation As String = "Provider=Microsoft.ACE.Oledb.12.0;Data Source=檔案位址"
'Excel資料表之連接位址
Public DBLocation As String = "Provider=Microsoft.ACE.Oledb.12.0;Data Source=檔案位址;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1,ReadOnly=0"""
屬性意義
HDR=Yes: 第一列不要視為資料欄位,應視為欄位標題
IMEX=1: 所有資料視為文字讀取,如此即可順利讀取所有資料
ReadOnly=0: 設定為可讀寫,如此才可以更新內容

以OleDbConnection開啟資料庫
DBConnection = New OleDbConnection(DBLocation)
DBConnection.Open() '打開連接

以SQL命令執行各種搜尋,如︰
Dim objCmd As OleDbCommand = New OleDbCommand("SELECT * FROM 資料表", DBConnection)
此處資料表即為Access中的資料表,或是Excel中的工作表

引用Excel工作表時︰
  • 若要引用工作表全部範圍
    Select * from [Sheet1$]
  • 引用已定義名稱的範圍
    Select * from [MyNamedRange] 
  • 引用工作表中特定位址的某範圍
    Select * from [Sheet1$A1:B10] 
※工作表後的美元符號($)代表工作表存在的指示,若要新增工作表,請勿使用此符號

Reference:  HOW TO:使用 ADO.NET 擷取與修改利用 Visual Basic .NET 之 Excel 活頁簿中的記錄