小议ADO.NET对象模型
了解ADO.NET模型对数据应用程序开发很重要,下面是我今天学习总结的ADO.NET新手入门级的知识,希望对新手有用,也期待以这块破砖头引来高手们的玉哦!
DataSet(数据集)。它表示整个数据库的一个子集,无需跟数据库有直接连接,缓存在机器中,DataSet需要周期性地跟父数据库进行连接,以对数据库和DataSet相互更新。
DataSet不仅仅从一个表中获得几行,而且要获得一组表,它们包含有原数据库关系和约束的必要原数据。
DataSet由DataTable对象和DataRelation对象组成,Tables属性返回的一个DataTableCollection保存着所有的DataTable对象。
DataSet结构:
![](https://www.cnblogs.com/images/cnblogs_com/gishuazi/20090305/DataSet.jpg)
DataAdapter(数据库适配器)。是关系型数据库的抽象,它的角色是作为DataSet和数据库之间的桥梁,DataAdapter提供的Fill()方法可以从数据库中获取数据并生成DataSet。
数据通讯的过程如图:
![](https://www.cnblogs.com/images/cnblogs_com/gishuazi/20090305/S.jpg)
下面让我们动手试试吧!
数据库表结构:
![](https://www.cnblogs.com/images/cnblogs_com/gishuazi/20090305/tbfood.jpg)
测试代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsApplication5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string commandstring = "select foodname,id ,foodprice from tb_food ";
string connectionstring = "server=.;database=db_MrCy;uid=sa;pwd=";
SqlDataAdapter DataAdapter = new SqlDataAdapter(commandstring, connectionstring); //
DataSet dataset = new DataSet();
DataAdapter.Fill(dataset); // 填充到数据集
DataTable dataTable = dataset.Tables[0];
foreach (DataRow dataRow in dataTable.Rows)
listBox1.Items.Add(dataRow["foodname"]);
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsApplication5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string commandstring = "select foodname,id ,foodprice from tb_food ";
string connectionstring = "server=.;database=db_MrCy;uid=sa;pwd=";
SqlDataAdapter DataAdapter = new SqlDataAdapter(commandstring, connectionstring); //
DataSet dataset = new DataSet();
DataAdapter.Fill(dataset); // 填充到数据集
DataTable dataTable = dataset.Tables[0];
foreach (DataRow dataRow in dataTable.Rows)
listBox1.Items.Add(dataRow["foodname"]);
}
}
}
测试结果:
![](https://www.cnblogs.com/images/cnblogs_com/gishuazi/20090305/testresult.jpg)
用下面代码,我们可以简单地得到某条记录的某个字段值:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
后话:我觉得本文知识点对VB程序员的ADO.NET迁移很重要,究其原因,是ADO.NET的非连接型(disconnecten)的数据架构,在这里数据从数据库取出,缓存在本地及其中。由上述select语句得到的DataSet数据集只包含foodname,id ,foodprice三个字段,所得得到的dataTable结构也同样道理。