这次机房合作版已经是第三次做机房收费系统了。虽然东西一样,但是我们每次所应用的东西不一样,所以每次也都是一次新的学习。在此过程中,也会发现一些可以改进的东西。那么这一次来说说在组合查询中HashTable的妙用。
问题描述
组合查询中,每一个查询条件需要从下拉框里选择字段名、操作符。这里我们显示给用户的字段名是中文的,但是我们去数据库查询时却需要英文字段名。因此,我们需要将字段名翻译为数据库中相对应的英文字段名。此前,我都是这么处理的,代码如下:
Select Case CboFieldName2.SelectedIndex
Case 0
selectfieldname(1) = "CardID"
Case 1
selectfieldname(1) = "StudentID"
Case 2
selectfieldname(1) = "StudentName"
Case 3
selectfieldname(1) = "Sex"
Case 4
selectfieldname(1) = "Grade"
Case 5
selectfieldname(1) = "Department"
Case 6
selectfieldname(1) = "Class"
Case 7
selectfieldname(1) = "Balance"
Case 8
selectfieldname(1) = "CardType"
End Select
这个代码一看就很令人厌烦,借曹操的话说就是食之无味弃之可惜的鸡肋。我不是勤快人,这次写这部分的时候就在考虑有没有什么方法可以丢掉这些select case.于是就想起来了之前用过的HashTable!
HasHTable简介
官方的解释呢,就自己动手搜去吧。用一句话来说,Hashtable是一种容器,用来存储类似key/value的键值对,其中key通常可用来快速查找,类似于数据表中的主键吧。这里从Hashtable里查找的格式如下:Hashtable.Item("key"),我们就根据key得到了和其对应的Value的值。从它的结构和使用上看,非常满足我们slecet case的结构,请大家思考一下!然后,再看看,具体的使用。
具体使用:
首先先定义一个窗体模块级的Hashtable。然后,在窗体加载事件中定义两个字符创数组分别存储中文字段名和英文字段名。这里需要注意的是,中英文字段名需要根据数组的下标建立一一对应的关系。然后将中文字段名加载到Comobox控件中,同时用两个字符串数组添加到Hashtable中。
Private Sub form_Load(sender AsObject, e As EventArgs) Handles MyBase.Load
Dim fieldname() As String
Dim englishname() As String
fieldname = {"学号", "姓名", "年龄", "性别", "年级", "班级", "系别"}
englishname = {"studentId", "studentName", "age", "sex", "grade", "class", "department"}
’加载中文字段名到下拉框中
CboFieldName1.Items.AddRange(fieldname) CboFieldName2.Items.AddRange(fieldname)
CboFieldName3.Items.AddRange(fieldname)
'以中文字段名为key,英文字段名为value添加到hashtable中 For i = 0 Tofieldname.Count - 1 hashtable.Add(fieldname(i),englishname(i))
Next End Sub
接下来,在使用时取得英文字段名的代码 就简化为如下几行了:
Private Sub butnInquire_Click(sender As Object, e As EventArgs) Handles butnInquire.Click
'根据下拉框选取的字段名,取得对应的英文字段名
englishfieldname1 = hashtable.Item(CboFieldName1.Text.Trim)
englishfieldname2= hashtable.Item(CboFieldName2.Text.Trim)
englishfieldname3= hashtable.Item(CboFieldName3.Text.Trim)
End sub
总之,这里的使用虽然不是什么很有技术含量的东西,但是每一次的学习有所得还是不错的。三次经历机房收费系统,却看见了不一样的风景。所以,即使我们多次途经同一段路,只要我们在路上,就不曾停止前进。