8-数据库

 

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
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值