180 likes | 308 Views
Visual Basic 2010 ADO .NET 資料庫查詢. Ren-Jie Wang, 王 仁 傑 , Ph.D. rjwang@nutc.edu.tw 課程網頁 : http://home.scs.nutc.edu.tw/rjwang/. 如何引用 ADO .NET 命名空間. .NET Framework 架構中是由所用資料庫 ( 資料來源 ) 來決定使用 SQL .NET Data Provider 或是 OLE DB .NET Data Provider 。 兩者 .NET Data Provider 分屬不同的命名空間
E N D
Visual Basic 2010ADO .NET資料庫查詢 Ren-Jie Wang,王 仁 傑, Ph.D. rjwang@nutc.edu.tw 課程網頁: http://home.scs.nutc.edu.tw/rjwang/
如何引用ADO .NET命名空間 • .NET Framework 架構中是由所用資料庫(資料來源)來決定使用 SQL .NET Data Provider 或是 OLE DB .NET Data Provider。 • 兩者 .NET Data Provider 分屬不同的命名空間 • 需使用 Imports敘述來引用對應 ADO .NET 的命名空間。 • 才能在撰寫程式時,使用簡潔 ADO .NET 物件來存取資料庫。
System.Data.OleDb • 此命名空間允許連接到 OLE DB 這類型資料來源、接受 SQL 查詢和透過 Fill 方法,將資料填入 DataSet。 • 資料來源包括: Access、Excel、SQL Server 7.0 以上版本的資料庫…等。 • 在程式中用這類型資料庫,需在程式開頭用Imports敘述引用此命名空間,寫法: Imports System.Data.OleDb ‘ 引用OLE DB 資料來源的物件 • 在 OLE DB .NET Data Provider 下,所使用的 ADO .NET 物件名稱前面需加上 OleDb,如:OleDbConnection、OleDbCommand、OleDbDataReader… 等。
System.Data.SqlClient • 此命名空間允許直接連接 SQL Server 7.0(含)以上版本的資料庫。 • 在程式中用此命名空間,需在程式開頭用 Imports 敘述含入 System.Data.SqlClient,寫法: Imports System.Data.SqlClient • 在 SQL .NET Data Provider 下,所用的 ADO .NET物件名稱的前面必須加上Sql。 • 如:SqlConnection、SqlCommand、SqlDataReader … 等
下表即是ADO .NET在各所屬命名空間中各類別命名對照表:
如何使用DataSet物件 • DataSet物件是一個記憶體中的資料庫,它採用離線存取資料庫的方式。 • DataSet中的資料更新完畢後,再重新和SQL Server資料庫進行連線,將資料全部一次更新到SQL Server資料庫中。 • DataSet執行效率佳,適用於多用戶端資料存取,但此種方式須耗費較多的記憶體空間。 • DataSet中可以包含一個以上的DataTable物件,DataTable物件相當於主記憶體中的一個資料表。 • DataAdapter物件是資料庫和DataSet之間溝通的橋樑。DataAdapter物件使用Command物件執行SQL命令,將由資料庫所擷取的資料送到DataSet,此時便可使用DataTable物件來存取資料表,將DataSet裡面的資料經過處理後再一次寫回資料庫。
如何建立DataSet物件讀取資料表記錄 • Step1: 建立ds屬於DataSet物件。 Dim ds As New DataSet() • Step2: 建立da屬於OleDbDataAdapter物件,並指定SQL查詢的是「data1」資料表,要連接的資料來源為應用程式組態檔app.config中的連線字串指定的資料庫。 Dim da As New OleDbDataAdapter(“SELECT * FROM data1”, My.Settings.連線字串名稱) • Step3: 使用DataAdapter物件的Fill方法,將查詢資料的結果放到DataSet物件中。此時DataSet物件中即會產生一個DataTable物件,該DataTable物件會以資料表的方式存放查詢資料的結果。 da.Fill(ds, "data1") • Step4: 建立dt屬於DataTable物件,並由 DataSet物件取出資料表 Dim dt As DataTable = ds.Tables("data1")
如何由DataTable物件讀取資料表記錄 • DataSet物件模型可以了解,在DataSet下包含很多子類別,如DataTable、DataColumn、DataRow…等。 • DataSet是記憶體的資料庫可用來存放多個DataTable物件。 • DataTable可用來存放資料表的多筆記錄資料、每一筆記錄稱為DataRow、DataRow的集合稱為DataRowCollection。 • DataTable包含DataColumnCollection集合,集合中的項目稱為DataColumn,DataColumn用來表示每一個欄位的資訊與資料型別。
DataTable物件 • 取得DataTable物件dt的欄位總數。dt.Columns.Count • 取得DataTable物件dt的第j個的欄位名稱 (註標起始值為0)。dt.Columns(j).ColumnName • 取得DataTable物件dt的記錄資料總筆數。dt.Rows.Count • 取得DataTable物件dt的第i列某一個欄位的資料內容。dt.Rows(i)("欄位名稱“) • 取得DataTable物件dt的第i列第j欄的資料內容,註標起始值為0。dt.Rows(i)(j)
如何由DataTable物件讀取資料表記錄 • Case01: 取得DataTable物件的欄位名稱,寫法如下: • 使用Columns.Count取得欄位的總數,然後再利用for配合ColumnName來取得第i欄的欄位名稱,並放入TextBox1文字方塊控制項內。 For i As Integer = 0 To dt.Columns.Count - 1 TextBox1.Text &= dt.Columns(i).ColumnName& vbTab Next
如何由DataTable物件讀取資料表記錄 • Case02:取得DataTable物件的欄位資料,有下列兩種方法: • 使用巢狀迴圈來逐一取得DataTable物件第i列第j欄的資料,並放入TextBox1文字方塊控制項內,其寫法如下: For i As Integer = 0 To dt.Rows.Count - 1 For j As Integer = 0 To dt.Columns.Count - 1 TextBox1.Text &= dt.Rows(i)(j).ToString() & vbTab Next TextBox1.Text &= vbNewLine Next
使用巢狀迴圈來逐一取得DataTable物件第i列某一個欄位的資料,並放入TextBox1文字方塊控制項內,其寫法如下:使用巢狀迴圈來逐一取得DataTable物件第i列某一個欄位的資料,並放入TextBox1文字方塊控制項內,其寫法如下: For i As Integer = 0 To dt.Rows.Count - 1 TextBox1.Text &= dt.Rows(i)("欄位名稱1").ToString() & vbTab TextBox1.Text &= dt.Rows(i)("欄位名稱2").ToString() & vbTab TextBox1.Text &= dt.Rows(i)("欄位名稱3").ToString() & vbTab ………… TextBox1.Text &= dt.Rows(i)("欄位名稱N ").ToString() & vbTab TextBox1.Text &= vbNewLine Next
SQL語法 • SQL(Structured Query Language:結構化查詢語言)是一套標準的資料庫管理與存取語言,它使用接近人類英文口語的方式來存取資料庫,而一般常見的 SQL Server資料庫 (如微軟的 Microsoft SQL Server ) 都支援 SQL語法,就連 Access 資料庫也可以使用 SQL 語法來存取。 • SQL 成為目前各類型資料庫中最為通用的資料庫存取語言。 • 了解SQL語法是學習資料庫程式設計的首要課題之一,撰寫SQL語法要注意的是,單引號括住的資料會被SQL語法視為字串,SQL語法沒有大寫小之分。 • 關於資料庫的操作(新增、修改、刪除…)或SQL等內容,時間有限,不在本課程介紹。
SELECT敘述 • SQL語法中的SELECT敘述可根據WHERE子句所設定的條件式,對資料庫進行資料的查詢或排序工作,其語法如下: • 例如: Select * from [data1] order by [bno],[no] • 查詢data1資料表, 依欄位bno,no遞增排序 • 在程式中建議欄位名稱應加上[], 和變數名稱有所區別
實例演練 • 實作「軟體設計丙級學科檢定測驗程式」 • 示範如何查詢Access資料庫,並完成學科測驗程式。