使用Visual Studio平台连接数据库——数据库的离线访问(四)

  ADO.NET的特色在于:不仅可以实时在线操作数据库,并且支持对数据源的离线访问。后者应用更为广泛,尤其是在并发用户数很多且无法保证连续连接的网络环境下。

1.数据适配

数据库离线访问工作原理图:

   DataAdapter对象:数据适配器,也就是利用连接对象连接数据源,使用命令对象(Command)规定的操作,从数据源中检索出数据送往数据集,或者将数据集中编辑后的数据送回数据源。

  DataAdapter对象作为DataSet和数据源之间的桥接器,通过Fill()方法向DataSet填充数据 ,Updata更新数据。

DataAdapter
SelectCommand
InsertCommand
UpdataCommand
DeleteCommand

语法形式:

SqlDataAdapter myda;

SqlCommand command = new Command(sql,sqlcon);

myda = new SqlDataAdapter(command);

还有一个重要的Fill()方法:

myda.Fill(myst,"XSB");

myst表示数据集名,XSB表示数据表名。

2.数据集机制

相当于一个暂存的数据库。创建数据集的语句如下:

DataSet myst = new DataSet();

语句中myst代表数据集对象。

3.数据库离线访问实例

利用数据集机制,使用DataAdapter对象填充DataSet方法,离线访问XSCJDB1数据库。与上篇功能一样。界面与之也几乎一样,区别在于:将呈现的数据的文本框txtAllStu替换,使用数据网格(DataGridView)控件。

 

窗体标题改为“离线访问数据源”,图标是这样的

将其Name属性改为dgvAllStu;

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace _9_5
{
    public partial class Form1 : Form
    {
        string strcon = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=XSCJDB1;Integrated Security=True";
        DataSet myst = new DataSet();
        SqlDataAdapter myda;
        public Form1()
        {
            InitializeComponent();
            btnSearch_Click(null, null);
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btnInsert_Click(object sender, EventArgs e)
        {
            SqlConnection sqlcon = new SqlConnection(strcon);
            try
            {
                string stuID = txtStuID.Text.Trim();
                string stuName = txtName.Text.Trim();
                string stuXB;
                if (RbtnMale.Checked)
                {
                    stuXB = "男";
                }
                else
                {
                    stuXB = "女";

                }
                string stuBirthday = dateTimePicker1.Value.ToShortDateString().Split(' ')[0];
                string stuMajor = txtMajor.Text.Trim();
                string stuCredit = txtCredit.Text.Trim();
                SqlCommand command = new SqlCommand();
                command.CommandText = "INSERT INTO XSB(Xnum,XM,XB,CSRQ,ZY,ZXF)  VALUES('" + stuID + "','" + stuName + "','" + stuXB + "','" + stuBirthday + "','" + stuMajor + "','" + stuCredit + "')";
                command.CommandType = CommandType.Text;
                command.Connection = sqlcon;
                sqlcon.Open();
                myda = new SqlDataAdapter(command);
                myda.Fill(myst, "XSB");
                MessageBox.Show("插入成功!", "消息", MessageBoxButtons.OK);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                sqlcon.Close();
            }
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            using (SqlConnection sqlcon = new SqlConnection(strcon))
            {
                sqlcon.Open();
                string sql = "SELECT * FROM XSB";
                SqlCommand command = new SqlCommand(sql, sqlcon);
                myda = new SqlDataAdapter(command);
                myst.Tables.Clear();
                myda.Fill(myst, "XSB");
                dgvAllStu.DataSource = myst.Tables["XSB"];

            }
        }
    }

}

 

 

 但是记录值没有任何变化,这是因为DataGridView控件显示的是已经离线的存储在数据集中的数据,虽然数据库记录增加了一条,但是数据集并没有立即更新。

想要看到刚刚的记录,需要连接数据库,并且通过适配器重新载入数据:

sqlcon.Open();
                string sql = "SELECT * FROM XSB";
                SqlCommand command = new SqlCommand(sql, sqlcon);
                myda = new SqlDataAdapter(command);
                myst.Tables.Clear();
                myda.Fill(myst, "XSB");

 单击刷新,在事件中执行上段代码,执行完毕后,可以看到新纪录。

 今日份实验叮咚!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值