VB.NET数据库项目通用模块的创建及其应用
2016-11-16朱瑞芳
朱瑞芳
摘要:运用VB.NET技术建立数据库项目通用模块,并且通过运用listView控件,说明数据通用模块的应用方法,阐述了类的继承和扩展的具体运用,为设计高效、稳定的数据库管理系统提供宝贵资源。
关键词:通用模块;添加;删除;编辑
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)25-0011-05
Abstract: Using the built module database project of VB.NET technology and listView control,that demonstrate the application of method of general module data,Also described the specific use of inheritance and expansion of class. These Provide valuable resources for the database management system design of high efficiency and stable.
Key words: universal module; add; delete; edit
1 引言
VB.NET继承类允许扩展类,可以创造一个带有一定功能的新类。如果有部分功能已经能由一个已经存在的类提供了,则可以扩展原来的那个类来构建一个新类。那么新建的这个类成为子类或者继承类,而原来的那个类称为父类或者基类。扩充类的过程称为扩展,关键字为inherit 用于描述扩展类的行为。在VB.NET中一个类只能有一个父类。
2 数据库通用模块代码及其说明
打开Visual Studio 2010,新建一个工程,名称假设为SalesManager,在项目下新建一个文件夹,命名为TYConfig.在该文件夹下,添加6个类。其中TYConnection为父类,TYCommand、TYDataReader、TYDataTable子类3个为子类或称继承类。如图1解决方案资源资源管理器所示。下面分别介绍主要代码(注:单引号“‘”后面的文字为简要说明,与代码同行的是说明同行的代码;单独行的是说明下一行的代码)。
2.1 数据库连接通用模块
父类TYConnection
Imports System.Data.SqlClient ‘连接SQL Server
Namespace TYConfig ‘命名空间名称为TYConfig
Public Class TYConnection ‘声明类TYConnection
‘声明一个受保护变量存储连接数据库的信息
Protected ConnStr As String
‘声明用于数据库连接的保护成员
Protected conn As SqlConnection
Protected Sub Open()
‘判断连接字符串是否为空
If ConnStr Is Nothing Or ConnStr = "" Then
MessageBox.Show("请指定连接字符串!")
Return
End If
‘实例化Connection类
conn = New SqlConnection(ConnStr)
conn.Open() ‘打开数据库
End Sub
Protected Sub Close()
conn.Close() ‘关闭连接
End Sub
End Class
End Namespace
在这“TYConnection”类中,最上面二句和最下面一句,表示命名空间的定义,在下面3个继承类中不再重复。
2.2 创建TYCommand 类
该类包括 Function过程,分别实现添加、删除、更新数据。
Imports System.Data.SqlClient ‘连接SQL Server
Namespace TYConfig ‘命名空间名称为TYConfig
Public Class TYCommand ‘TYCommand类的声明
Inherits TYConnection ‘为继承TYConnection类的功能,重用这个类里的功能,避免代码重复
Public Sub New(ByVal str As String) ‘创建有一个参数为str的构造函数,指定连接信息字符串
ConnStr = str
End Sub
Public Function Insert(ByVal strSQL As Strin ) As Integer ‘添加数据的Function过程
Open() ‘连接数据库
‘创建 SqlCommand 实例
Dim cmd as SqlCommand=New SqlCommand(strSQL,comm)
‘count 表示受影响的行数,初始化为0
Dim count As Integer=0
Count=cmd.ExecuteNonQuery()
Close() ‘关闭数据库
End Fuction
‘删除数据的Function过程 ,有三个参数,分别对应数据库中的表名、需要删除的条件
Public Function Delete(ByVal table As String, ByVal row As String, ByVal value As String) As Integer
Open() ‘连接数据库
‘创建SQL命令
Dim strSQL As String = "Delete From " + table + " Where " + row + "=" + value
‘创建 SqlCommand 实例
Dim cmd As SqlCommand =New SqlCommand(strSQL, conn)
‘count 表示受影响的行数,初始化为0
Dim count As Integer = 0
count = cmd.ExecuteNonQuery()
Close() ‘关闭数据库
Return count
End Function
‘更新数据的Function过程
Public Function Update(ByVal table As _
String, ByVal strContent As String, _
ByVal row As String, ByVal value As String) As Integer
Open() ‘连接数据库
Dim strSQL As String = "Update " + table + " Set " + strContent + " Where " + row + "=" + value
Dim cmd As SqlCommand = New SqlCommand(strSQL, conn)
Dim count As Integer = 0
count = cmd.ExecuteNonQuery()
Close() ‘关闭数据库
Return count
End Function
End Class
End Namespace
2.3 创建DataBinding 类
用于ListView控件与数据库绑定。如果与ComboBox、TextVox、ListBox等控件绑定,方法类似。这里以ListView控件为例。
Namespace TYConfig ‘命名空间名称为TYConfig
Public Class DataBinding
‘根据指定表和指定查询条件,填充ListView.分别有控件类型、表名、列数、查询条件
Public Shared Sub FillListView(ByRef lsv As ListView, ByVal tableName As String, ByVal num As Integer, _ ByVal connStr As String, Optional ByVal field As String = "",
Optional ByVal op As String = "=", Optional ByVal value As String = "")
‘清空ListView
lsv.Items.Clear()
‘设置SQL 语句,即读出表
Dim SQLString As String = "SELECT * FROM " & tableName
‘如果有查询条件,则将查询条件追加到SQL语句
If field <> "" Then
SQLString += " Where " & field & op & value
End If
‘创建DBDataTable对象
Dim dt As TYDataTable = New TYDataTable(connStr)
‘调用DBDataTable 的CreateDataTable函数,得到DataTable表
Dim table As DataTable = dt.CreateDataTable(SQLString, tableName)
‘在循环中遍历DataTable表,逐行逐列把表中的内容加入到ListView控件中
Dim UserRow As DataRow
Dim LItem As ListViewItem
For Each UserRow In table.Rows
LItem = New ListViewItem(UserRow(0). ToString.Trim())
Dim i As Integer
For i = 1 To num - 1
LItem.SubItems.Add(UserRow(i). ToString().Trim())
Next
lsv.Items.Add(LItem)
Next
End Sub
End Class
2.4创建TYDataReader类
Imports System.Data.SqlClient ‘连接SQL Server
Namespace TYConfig ‘命名空间名称为TYConfig
Public Class TYDataReader
Inherits TYConnection
‘在构造函数中指定连接信息字符串
Public Sub New(ByVal str As String)
ConnStr = str
End Sub
Public Function CreateDataReader( ByVal strSQL As String,ByVal table As String) As SqlDataReader
‘打开数据库连接
Open()
‘创建SqlCommand对象
Dim cmd As SqlCommand =New SqlCommand(strSQL, conn)
‘ExecuteReader执行SQL语句并返回SqlDataReader
Dim dr As SqlDataReader = cmd.ExecuteReader()
‘返回DataReader
Return dr
End Function
End Class
End Namespace
2.5创建TYDataTable类
Imports System.Data.SqlClient ‘连接SQL Server
Namespace TYConfig ‘命名空间名称为TYConfig
Public Class TYDataTable
Inherits TYConnection
‘在构造函数中指定连接信息字符串
Public Sub New(ByVal str As String)
ConnStr = str
End Sub
Public Function CreateDataTable( ByVal strSQL As String, ByVal table As String) As DataTable
Open() ‘连接数据库
‘使用连接字符串和SqlConnecton创建 SqlDataAdapter的实例
Dim da As SqlDataAdapter = New SqlDataAdapter(strSQL, conn)
Dim ds As New Data.DataSet() ‘创建DataSet对象
da.Fill(ds) ‘填充DataSet
Close() ‘关闭数据库
Return ds.Tables(0) ‘返回DataTable
End Function
End Class
End Namespace
3 数据库公用模块运用准备
有了以上5个通用模块,配合ListView控件,便可以方便设计一个简单的数据库管理系统,能实现对数据的添加、编辑、删除、刷新等基本操作。
3.1数据库准备
本文以SQL Server2008为例,假设在C盘根目录下有一个销售统计的数据库,文件名为Sales.mdf。其中一个通讯录表名为txl。数据和结构如图2所示:
(必须注意:如果表中有自动增量必须取消,否则添加或修改数据时会出错。)
3.2 操作界面设计
6个文本框和标签框,4个命令按钮,1个ListView控件(ListView必须设置好如下属性:View为Details;GridLines为True;Column的ColumnHeader集合编辑器里要加上六列,并将text改为真实列名;滚动条设置为可用)。界面如图3所示:
4 数据库通用模块的运用说明
在TYConfig文件夹下再创建ConncetionString类,用于连接数据库
Namespace TYConfig
Public Class ConnectionString
Public ConnectionInfo As String = "数据库连接字符串"
End Class
End Namespace
注:数据库连接字符串:VS2010数据菜单——添加数据源(若已添加,则按显示数据源)——数据源配置向导,选“数据库”——“下一步”,选“数据集”——计算机名称.数据库名称.dbo
假设计算机属性名称为PCName,数据库名称为sales,则在文本框里自动出现: PCName.sales.dbo
也可以做其他选择。此时,将下面“连接字符串”左侧的“+”号点开,就看到字符串为:
Data Source=PCName;Initial Catalog=sales; User ID=sa
下一步,“是否将连接保存为”: salesConnectionString
下一步,“正在检索数据库信息”,选择表、视图、存储过程、函数等复选框。DataSet名称为:salesDataSet
此时便实现VS与SQL数据库的连接。
回到操作界面,给每个命令按钮添加代码
在Form Class类里,最前面需要输入Imports SalesManager.TYConfig(不需要TYConfig的命名空间语句)
4.1“添加”按钮的click事件代码
‘注意数据类型,第一列为int,所以不用单引号
‘利用SQL插放语句,将各文本框里的数据,定义到txl表
Dim SQLstr As String = "Insert into txl values(" & TextBox1.Text & "," & TextBox2.Text & ", " & TextBox3.Text & " , " & TextBox4.Text & " , " & TextBox5.Text & ", " & TextBox6.Text & ")"
Dim cmd As TYCommand = New TYCommand (New ConnectionString().ConnectionInfo)
If cmd.Insert(SQLstr) > 0 Then
MsgBox("信息添加成功!", MsgBoxStyle.DefaultButton1, "添加信息")
Else
MsgBox("添加信息失败!")
End If
TextBox1.Text ="": TextBox2.Text="": TextBox3.Text = "": TextBox4.Text = "" : TextBox5.Text = "" : TextBox6.Text = ""
DataBinding.FillListView(ListView1, "txl", 6, New ConnectionString().ConnectionInfo)
End Sub
4.2 “删除”按钮click事件代码
If ListView1.SelectedItems.Count = 0 Then
MsgBox("请选择需要删除的行")
Exit Sub
End If
Dim cmd As TYCommand = New TYCommand( New ConnectionString().ConnectionInfo)
‘利用TYCommand中的Delect Function过程,判定删除是否成功
If cmd.Delete("txl", "tID”, ListView1.SelectedItems(0).Text) > 0 Then
MsgBox("删除数据成功!", MsgBoxStyle.OkOnly, "删除")
Else
MsgBox("删除失败!")
End If
‘删除符合条件的行号后重新将表中数据绑定到ListView1控件中
DataBinding.FillListView(ListView1, "txl", 6, New ConnectionString().ConnectionInfo)
4.3 “更新”按钮click事件代码
Dim cmd As TYCommand = New TYCommand( New ConnectionString().ConnectionInfo)
Dim strContent As String = "tID= " & TextBox1.Text & ", _
tName=" & TextBox2.Text & ", tEmail=" & TextBox3.Text & " , tMobile=" & TextBox4.Text & ", _
tHomePhone=" & TextBox5.Text & ", tMemo=" & TextBox6.Text & ""
‘利用TYCommand中的Update Function过程,判断更新是否成功
If cmd.Update("txl", strContent, "tid", "" & TextBox1.Text & "") > 0 Then
MsgBox("修改信息成功!", MsgBoxStyle.OkOnly, "修改信息")
Else
MsgBox("修改信息未被接受,请检查你所做的修改是否正确。", MsgBoxStyle.Critical, "修改信息")
End If
DataBinding.FillListView(ListView1, "txl", 6, New ConnectionString().ConnectionInfo)
4.4“显示ListVew1数据”按钮的click事件代码
DataBinding.FillListView(ListView1, "txl",6, New ConnectionString().ConnectionInfo)
4.5 ListView1_Click事件代码
‘先清空文本框数据
TextBox1.Text = "":TextBox2.Text = "":TextBox3.Text = "":
TextBox4.Text = "":TextBox5.Text = "":TextBox6.Text = "":
If ListView1.SelectedItems.Count = 0 Then Exit Sub
‘当鼠标选中ListView1控件中某一行时,自动将该行中的每一个数据,赋值给各文本框
TextBox1.Text =ListView1._
SelectedItems(0). SubItems(0).Text
TextBox2.Text = ListView1. SelectedItems(0).SubItems(1).Text
TextBox3.Text = ListView1.SelectedItems(0).SubItems(2).Text
TextBox4.Text = ListView1. SelectedItems(0).SubItems(3).Text
TextBox4.Text = ListView1. SelectedItems(0).SubItems(4).Text
TextBox6.Text = ListView1.SelectedItems(0).SubItems(5).Text
4.6 补充说明
该程序调试时,如果出现如图4所示的异常情况,则说明需要添加引用,最简单的解决方法就是 导入“System.Windows.Forms”,即在该类代码的第一行,添加:Imports System.Windows.Forms,即可解决。
另外,可以在操作界面上加上菜单或右键快捷菜单以及多个表单页面,并且通过总界面作为父窗口,将所有界面贯穿起来,那么无论多么复杂的数据库,都能轻松构建。
5 结束语
由于VB.net技术可以创建数据库通用性模块,这些模块适用于任何一个关系数据库系统的设计,当理解掌握并熟练应用后就能提高数据库设计效率,也使软件设计变得相当简单,使非计算机专业的普通电脑爱好者也能涉足其中,感受无穷乐趣。
参考文献:
[1] 石志国,刘冀伟.张维存.VB.NET数据库编程[M].北京:清华大学出版社,2009.
[2] 青岛乐合信息技术有限公司.青岛海尔软件有限公司. VB.NET程序设计[M].北京:电子工业出版社,2011.
[3] 余青松,江红.VB.NET 程序设计[M].北京:清华大学出版社,2011.
[4] http://blog.csdn.net/xiao714041/article/details/45217969[EB/OL].