vb.net 教程 8-15 数据库操作实例1

来源:互联网 发布:家庭千兆网络布线 编辑:程序博客网 时间:2024/06/05 21:37

因某个朋友提出的Treeview操作数据库的问题,所以写了本节的代码。

本节代码使用的是command来操作的,主要原因:

1是绑定的灵活性不高

2是treeview似乎不能绑定数据,因为最终的数据是由TreeNode来显示的。

本节用到了罗斯文数据库中的产品表、类别表、供应商表。

设计界面如下:

左侧树状图列出类别和该类下的产品,根据选择的产品再将信息显示到右侧。

运行时如下图:

设计时需要考虑的问题:

一是OleDbConnection的使用贯穿于整个程序,考虑在窗体载入时打开,窗体关闭时关闭Connection。
二是窗口载入时显示出所有类别,使用 root1+类别ID 保存到Tag中。
三是为提高运行效率,在点击类别时检查是否下面有产品,如果没有产品,那么将产品加入到类别下,而不是载入窗体就加入产品到类别下。产品节点使用 root2+产品ID保存到所在节点。
四是点击树状图节点的时候,根据Tag中不同的前缀(root1还是root2)来执行不同操作。

主要代码如下:
加入窗体级变量:
 Dim odc As OleDbConnection
窗体载入时,将所有类别名称加入到树状图:
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load        odc = New OleDbConnection()        odc.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0;data source=D:\save\博客教程\08 数据库\Northwind.mdb"        Dim sql As String = "select 类别id,类别名称 from 类别"        Dim sqlCmd As New OleDbCommand(sql, odc)        Dim odReader As OleDbDataReader        odc.Open()        Dim nd As TreeNode        odReader = sqlCmd.ExecuteReader()        If odReader.HasRows Then            Do While odReader.Read                nd = New TreeNode                nd.Text = odReader(1)                nd.Tag = "root1" & odReader(0)                TreeView1.Nodes.Add(nd)            Loop        End If    End Sub
点击树状图上面的节点:
    Private Sub TreeView1_NodeMouseClick(sender As Object, e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick        Dim nd As TreeNode        nd = e.Node        If nd.Tag.ToString.Substring(0, 5) = "root1" Then            Dim typeId As String = nd.Tag.ToString.Substring(5, 1)            If nd.Nodes.Count = 0 Then                Dim sql As String = "select 产品Id,产品名称 from 产品 where 类别id=" & typeId                Dim sqlCmd As New OleDbCommand(sql, odc)                Dim odReader As OleDbDataReader                odReader = sqlCmd.ExecuteReader()                Dim childNode As TreeNode                If odReader.HasRows Then                    Do While odReader.Read                        childNode = New TreeNode                        childNode.Text = odReader(1)                        childNode.Tag = "root2" & odReader(0)                        nd.Nodes.Add(childNode)                    Loop                End If            End If            TreeView1.CollapseAll()            nd.Expand()        Else            Dim childNodeTag As String = nd.Tag.ToString            Dim productId As String = childNodeTag.Substring(5, childNodeTag.Length - 5)            Dim sql As String = "SELECT a.*, b.类别名称,c.公司名称                                 FROM (产品 a inner join 类别 b on a.类别ID=b.类别ID)                                 inner join 供应商 c on a.供应商ID=c.供应商ID                                  where 产品id=" & productId            Dim sqlCmd As New OleDbCommand(sql, odc)            Dim odReader As OleDbDataReader            odReader = sqlCmd.ExecuteReader(CommandBehavior.SingleRow)            odReader.Read()            TextBox1.Text = odReader("产品名称")            TextBox2.Text = odReader("公司名称")            TextBox3.Text = odReader("类别名称")            TextBox4.Text = odReader("单位数量")            TextBox5.Text = odReader("单价")            TextBox6.Text = odReader("库存量")            TextBox7.Text = odReader("订购量")            TextBox8.Text = odReader("再订购量")            TextBox9.Text = IIf(odReader("中止"), "是", "否")        End If    End Sub
窗体关闭时候,需要关闭数据库连接:
    Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing        odc.Close()    End Sub




由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。

学习更多vb.net知识,请参看vb.net 教程 目录




原创粉丝点击