vb.net 教程 8-15 数据库操作实例1
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請在顯著位置標明本文出處以及作者網(wǎng)名,未經(jīng)作者允許不得用于商業(yè)目的。
因某個朋友提出的Treeview操作數(shù)據(jù)庫的問題,所以寫了本節(jié)的代碼。
本節(jié)代碼使用的是command來操作的,主要原因:
1是綁定的靈活性不高
2是treeview似乎不能綁定數(shù)據(jù),因為最終的數(shù)據(jù)是由TreeNode來顯示的。
本節(jié)用到了羅斯文數(shù)據(jù)庫中的產(chǎn)品表、類別表、供應(yīng)商表。
設(shè)計界面如下:
左側(cè)樹狀圖列出類別和該類下的產(chǎn)品,根據(jù)選擇的產(chǎn)品再將信息顯示到右側(cè)。
運行時如下圖:
設(shè)計時需要考慮的問題:
一是OleDbConnection的使用貫穿于整個程序,考慮在窗體載入時打開,窗體關(guān)閉時關(guān)閉Connection。
二是窗口載入時顯示出所有類別,使用 root1+類別ID 保存到Tag中。
三是為提高運行效率,在點擊類別時檢查是否下面有產(chǎn)品,如果沒有產(chǎn)品,那么將產(chǎn)品加入到類別下,而不是載入窗體就加入產(chǎn)品到類別下。產(chǎn)品節(jié)點使用 root2+產(chǎn)品ID保存到所在節(jié)點。
四是點擊樹狀圖節(jié)點的時候,根據(jù)Tag中不同的前綴(root1還是root2)來執(zhí)行不同操作。
?
主要代碼如下:
加入窗體級變量:
Dim odc As OleDbConnection窗體載入時,將所有類別名稱加入到樹狀圖:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Loadodc = New OleDbConnection()odc.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0;data source=D:\save\博客教程\08 數(shù)據(jù)庫\Northwind.mdb"Dim sql As String = "select 類別id,類別名稱 from 類別"Dim sqlCmd As New OleDbCommand(sql, odc)Dim odReader As OleDbDataReaderodc.Open()Dim nd As TreeNodeodReader = sqlCmd.ExecuteReader()If odReader.HasRows ThenDo While odReader.Readnd = New TreeNodend.Text = odReader(1)nd.Tag = "root1" & odReader(0)TreeView1.Nodes.Add(nd)LoopEnd IfEnd Sub點擊樹狀圖上面的節(jié)點:
Private Sub TreeView1_NodeMouseClick(sender As Object, e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClickDim nd As TreeNodend = e.NodeIf nd.Tag.ToString.Substring(0, 5) = "root1" ThenDim typeId As String = nd.Tag.ToString.Substring(5, 1)If nd.Nodes.Count = 0 ThenDim sql As String = "select 產(chǎn)品Id,產(chǎn)品名稱 from 產(chǎn)品 where 類別id=" & typeIdDim sqlCmd As New OleDbCommand(sql, odc)Dim odReader As OleDbDataReaderodReader = sqlCmd.ExecuteReader()Dim childNode As TreeNodeIf odReader.HasRows ThenDo While odReader.ReadchildNode = New TreeNodechildNode.Text = odReader(1)childNode.Tag = "root2" & odReader(0)nd.Nodes.Add(childNode)LoopEnd IfEnd IfTreeView1.CollapseAll()nd.Expand()ElseDim childNodeTag As String = nd.Tag.ToStringDim productId As String = childNodeTag.Substring(5, childNodeTag.Length - 5)Dim sql As String = "SELECT a.*, b.類別名稱,c.公司名稱FROM (產(chǎn)品 a inner join 類別 b on a.類別ID=b.類別ID)inner join 供應(yīng)商 c on a.供應(yīng)商ID=c.供應(yīng)商ID where 產(chǎn)品id=" & productIdDim sqlCmd As New OleDbCommand(sql, odc)Dim odReader As OleDbDataReaderodReader = sqlCmd.ExecuteReader(CommandBehavior.SingleRow)odReader.Read()TextBox1.Text = odReader("產(chǎn)品名稱")TextBox2.Text = odReader("公司名稱")TextBox3.Text = odReader("類別名稱")TextBox4.Text = odReader("單位數(shù)量")TextBox5.Text = odReader("單價")TextBox6.Text = odReader("庫存量")TextBox7.Text = odReader("訂購量")TextBox8.Text = odReader("再訂購量")TextBox9.Text = IIf(odReader("中止"), "是", "否")End IfEnd Sub窗體關(guān)閉時候,需要關(guān)閉數(shù)據(jù)庫連接:
Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closingodc.Close()End Sub?
?
?
?
?
由于.net平臺下C#和vb.NET很相似,本文也可以為C#愛好者提供參考。
學(xué)習(xí)更多vb.net知識,請參看vb.net 教程 目錄
?
?
?
總結(jié)
以上是生活随笔為你收集整理的vb.net 教程 8-15 数据库操作实例1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新春活动策划案例(共31份)
- 下一篇: PADS2007添加过孔