转ado.net
ADO.NET概述
ADO和ADO.NET的一个主要区别是ADO.NET中的新功能不支持ADO中的Recordsets(记录集)。但ADO.NET不是对ADO的简单升级和继承,ADO.NET是全新的对象模型,比ADO更适用于分布式及Internet等大型应用程序环境,可以说它是专门为.NET平台设计的数据存取结构。 ADO.NET是.NET框架中的数据访问模型,主要涉及到System.Data、System.Data.SqlClient和System.Data.OleDb三个命名空间中的类。
ADO.NET中有三个最重要的类:
“数据连接”(Connection)对象建立到数据库的连接。在ADO.NET中,可以使用SqlConnection对象(连接SQL Server 7.0版或更高版本)和OleDbConnection对象(连接其他数据库)两者之一创建和管理连接。
“数据适配器”(DataAdapter)对象作为DataSet和数据库的中介。
“数据集”(DataSet)对象在内存中存储数据,供应用程序随时使用。
另外,ADO.NET中还有一个Command对象,它可以对数据库执行SQL语句,而返回的结果可以通过DataReader对象以只读、单向的方式获取。
一个简单的数据库管理系统的设计及其实现
⒈ 创建数据库
⒉ 设计要实现的功能
⒊ 窗体设计
⒋ 连接数据库
使用OleDbConnection对象连接其他数据库
Dim OleDbConnection11 As String
OleDbConnection11="PROVIDER=Microsoft.JET.OLEDB.4.0;" & "DATA SOURCE=Address.mdb"
Dim conn As New OleDbConnection(MyOleConnection)
conn.Open()
‘拖动OleDbConnection到窗体设计界面中,设置ConnectionString属性为“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Address. mdb;”
创建数据适配器访问数据库
通过OleDbAdapter对象来访问用OleDbConnection建立连接的数据库。
适配器支持以下四个属性:
SelectCommand:引用某命令(SQL语句或存储过程名称)从数据存储区检索行。
InsertCommand:引用某命令以便向数据存储区插入行。
DeleteCommand:引用某命令以便向数据存储区删除行。
UpdateCommand:引用某命令以便修改数据存储区中的行。
数据适配器可以通过Fill方法填充数据集。数据集是ADO.NET的新特性,它类似于一个小型数据库,里面存储着数据,不过总是离线的,不占用连接(Connection)。
’从工具箱的数据栏中拖动OleDbDataAdapter到窗体设计界面中,这时会弹出配置数据适配器向导 。右键单击OleDbDataAdapter1的图标,在弹出的菜单中选择“生成数据集”,此时会弹出一个对话框,在“新建”后输入数据集的名称 。
数据绑定与浏览
’鼠标双击文本框DataBinding属性,选择该属性下的Text为下拉框中的addressdetail11(数据集)下detail的Name字段。
Private Sub btnprevious_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnprevious.Click
If Me.BindingContext(DataSet11, "detail").Position >= 1 Then
'如果当前显示的不是绑定数据的第一条记录,那么显示上一条记录,即位置号减1
Me.BindingContext(DataSet11, "detail").Position -= 1
Else
'如果是第一条记录,那么就显示第一条记录
Me.BindingContext(DataSet11, "detail").Position = 0
End If
End Sub
Dim headstr As String = "该通讯录"
Public Sub showposition()
Dim icnt As Integer
Dim ipos As Integer
icnt = Me.BindingContext(DataSet11, "detail").Count
If icnt = 0 Then
'如果总共为0条
lblposition.Text = "没有任何记录"
Else
'如果不是0条记录,那么设置lblposition的Text属性显示相关信息
ipos = Me.BindingContext(DataSet11, "detail").Position + 1
lblposition.Text = headstr & "共" & icnt.ToString & "条记录,当前为第" & _ ipos.ToString & "条,id为“
End If
End Sub
Private Sub btnprevious_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnprevious.Click
If Me.BindingContext(DataSet11, "detail").Position >= 1 Then
'如果当前显示的不是绑定数据的第一条记录,那么显示上一条记录,即位置号减1
Me.BindingContext(DataSet11, "detail").Position -= 1
Else
'如果是第一条记录,那么就显示第一条记录
Me.BindingContext(DataSet11, "detail").Position = 0
End If
showposition()
End Sub
⒍ 添加新记录
要添加记录,需要把所有显示各字段内容的文本框的ReadOnly属性设置为False,这样才可以让用户输入数据。
Private Sub setall(ByVal tf As Boolean)
txtname.ReadOnly = tf
txtbirth.ReadOnly = tf
txtemail.ReadOnly = tf
txtphone.ReadOnly = tf
txtmobile.ReadOnly = tf
txtbp.ReadOnly = tf
txtaddress.ReadOnly = tf
txtpc.ReadOnly = tf
txtdemo.ReadOnly = tf
btnfirst.Enabled = tf
btnprevious.Enabled = tf
btnnext.Enabled = tf
btnlast.Enabled = tf
btndel.Enabled = tf
btnsearch.Enabled = tf
btnall.Enabled = tf
End Sub
Private Sub btnadd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnadd.Click
'如果是添加时确认,即“添加”按钮已经变成了“确认”按钮
If btnadd.Text = "确认" Then
'保存添加时当前显示的记录号
Dim currentpos As Integer = Me.BindingContext(DataSet11, "detail").Position
'弹出警告框,如果用户单击“确定”,那么
If MessageBox.Show("确定添加吗?", "我的通讯录-确认", _ MessageBoxButtons.OKCancel) = DialogResult.OK Then
'检查姓名是否为空,如果空则警告,并结束该过程
If Trim(txtname.Text) = "" Then
MessageBox.Show("姓名不能为空!")
Return
End If
'把用户输入到各文本框的数据保存到变量中,并在两端添加单引号以方便用在SQL语句中
Dim sname As String = "'" & txtname.Text & " '"
Dim sbirth As String = "'" & txtbirth.Text & " '"
Dim semail As String = "'" & txtemail.Text & " '"
Dim sphone As String = "'" & txtphone.Text & " '"
Dim smobile As String = "'" & txtmobile.Text & " '"
Dim sbp As String = "'" & txtbp.Text & " '"
Dim saddress As String = "'" & txtaddress.Text & " '"
Dim spc As String = "'" & txtpc.Text & " '"
Dim sdemo As String = "'" & txtdemo.Text & " '"
Dim currentid As String = txtid.Text
'定义插入的SQL语句
Dim addstr As String = "insert into _ detail(name,birth,email,phone,mobile,bp,address,pc,demo) values("
addstr = addstr & sname & "," & sbirth & ","
addstr = addstr & semail & "," & sphone & ","
addstr = addstr & smobile & "'" & sbp & ","
addstr = addstr & saddress & "," & spc & ","
addstr = addstr & sdemo & ")"
'下面开始执行插入操作
'打开连接
OleDbConnection1.Open()
'设置InsertCommand需要执行的SQL语句
OleDbDataAdapter1.InsertCommand.CommandText = addstr
'执行插入
OleDbDataAdapter1.InsertCommand.ExecuteNonQuery()
'清空数据集
Addressdetail11.Clear()
'重新从数据库获取最新记录来填充数据集
OleDbDataAdapter1.Fill(Addressdetail11)
'显示最后一个记录,也就是刚添加的记录
Me.BindingContext(Addressdetail11, "detail").Position = _ Me.BindingContext(Addressdetail11, "detail").Count
'关闭连接
OleDbConnection1.Close()
Else '如果用户在弹出警告框时单击“取消”按钮
'重新填充数据集
Addressdetail11.Clear()
OleDbDataAdapter1.Fill(Addressdetail11)
'显示单击“添加”按钮前显示的记录
Me.BindingContext(Addressdetail11, "detail").Position = currentpos
End If
'确认后,不管是取消还是确定,都恢复到单击“添加”按钮前的状态
showposition() '显示记录的位置信息
btnadd.Text = "添加" '按钮又恢复成“添加”
btnmodify.Enabled = True '“修改”按钮可用
setall(True) '文本框只读,不相关按钮可用
Return
End If
'如果是“添加”按钮,即第一次单击该按钮
If btnadd.Text = "添加" Then
'文本框置空
txtname.Text = ""
txtbirth.Text = ""
txtemail.Text = "@"
txtphone.Text = ""
txtmobile.Text = "13"
txtbp.Text = ""
txtaddress.Text = ""
txtpc.Text = ""
txtdemo.Text = ""
'改变为“确认”按钮
btnadd.Text = "确认"
btnmodify.Enabled = False
'文本框可写,并且不相关的按钮不可用
setall(False)
Return
End If
End Sub
7.修改记录 要修改记录,实际上就是更新记录,可以使用数据适配器的UpdateCommand属性。它的使用方法跟InsertCommand非常类似,只需把需要执行的SQL语句改成一个Update即可。不过Update语句需要知道更新哪一条记录,所以需要一个Where子句。
⒏ 删除记录 要删除记录,可以使用数据适配器的DeleteCommand属性。它的使用方法跟InsertCommand也非常类似,执行Delete的SQL语句即可。Delete语句也需要知道删除哪一条记录,所以需要一个Where子句,否则删除整个表中的所有记录。
⒐ 按姓名查询
这里仅实现一个简单的查询,使用数据适配器的SelectCommand属性,它跟InsertCommand、UpdateCommand和DeleteCommand属性也非常类似。只需要把执行的SQL语句改成一个Select语句即可。使用这种方法查询,是直接去数据库中查找,而不是在数据集中查找,因此要占用连接,这跟InsertCommand、UpdateCommand和DeleteCommand属性也是一样的。因为是通过SQL语句来实现查询,所以用它也完全可以实现多条件的高级查询。
⒑ 浏览全部数据
浏览全部数据,实际上就是一个不设置任何条件的查询,因此只要使用数据适配器的SelectCommand属性即可。
Private Sub btnall_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnall.Click
'定义查询语句,不设置任何条件
Dim selstr As String = "select * from detail"
'打开连接,并执行查询
OleDbConnection1.Open()
OleDbDataAdapter1.UpdateCommand.CommandText = selstr
OleDbDataAdapter1.UpdateCommand.ExecuteNonQuery()
'重新填充数据集,并关闭连接
Addressdetail11.Clear()
OleDbDataAdapter1.Fill(Addressdetail11, "detail")
OleDbConnection1.Close()
'因为这是通讯录的全部记录,所以显示记录位置信息的标签开头为"该通讯录"
headstr = "该通讯录"
showposition()
End Sub
Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1571482