一、ADO.NET五大对象理论

1、 Connection:与数据源建立连接。

2、 Command:对数据源执行SQL命令并返回结果。

  Command对象在执行的的时候有几个比较重要的方法,如ExecuteNonQuery方法,执行增删改命令。查询方法有2种:一个是ExecuteReader方法,返回一个DataReader对象。还有ExecuteScale方法,返回首行首列。

3、 DataReader:读取数据源的数据,只允许对将数据源以只读、顺向的方式查看其中所存储的数据。

  用于从数据源中检索只读数据集,并且必须有连接时才可以用。

4、 DataAdapter:数据适配器,对数据源执行操作并返回结果;

  在DataSet与数据源之间建立通信,将数据源中的数据写入DataSet中,或根据DataSet中的数据绑定数据源。

DataAdapter使用中主要有4个命令对象比较重要。它们分别是:SelectCommand、InsertCommand、UpdateCommand、DeleteCommand.

SelectCommand,主要是从数据库中检索数据,InsertCommand、UpdateCommand、DeleteCommand这3个命令对象主要负责把本地数据集DataSet中的数据上传回服务器。

DataAdapter的Fill方法,用于使用DataAdapter的SelectCommand的结果来填充DataSet。

5、 DataSet:内存中的数据库,是数据表的集合,它可以包含任意多个数据表。

  是ADO.NET的核心,相当于本地数据库,它与数据库无关的,它和远程数据库连接的桥梁就是.NET数据提供程序。它是由多个表构成,每个表都是一个DataTable对象。

DataSet中主要的对象时DataTable,每一列都是DataColumn对象,每一行都是一个DataRow对象。在里面可以加入一些约束,一个是UniqueConstraint(唯一约束),一个是ForeignKeyConstraint(外键约束)。

DataSet下面有两个重要的集合,一个是DataTables,一个是DataRelations.DataTables里面放置的都是DataTable对象。

关系图:

二、实践

  这里将对数据库的操作大致分为两类,一类是对数据库的查询,需要返回查询数据。一类是对数据库的增、删、改,不需要返回查询数据。下面就以这两类,结合实例说明。

查询:从上图中可以看到,想得到查询结果有三种方式:

  • 通过Command对象的ExecuteScalar方法(),但是这种方法只能返回由查询返回的结果集中的第一行的第一列,并且其返回值为object类型,其他列或行将被忽略。 ExecuteScalar()经常使用于当需要返回单一值时的情况。例如你刚插入一行数据,想要立即知道它的ID号,则可以使用ExecuteScalar()方法。通过MSDN给出的一个例子说明。
static public int AddProductCategory(string newName, string connString)
{
Int32 newProdID = 0;
string sql = "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "+ "SELECT CAST(scope_identity() AS int)";
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@Name", SqlDbType.VarChar);
cmd.Parameters["@name"].Value = newName;
try
{
conn.Open();
newProdID = (Int32)cmd.ExecuteScalar();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
return (int)newProdID;
}
  • 通过DataReader对象接收Command对象的ExecuteReader方法()的返回值,DataReader从数据库中检索只读、只进的数据流。 使用DataReader可以提高应用程序的性能,原因是它只要数据可用就立即检索数据,并且(默认情况下)一次只在内存中存储一行,减少了系统开销。下面是MSDN实例。
private static void ReadOrderData(string connectionString)
{
string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;";//sql语句
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
try
{
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}",reader[0], reader[1]));
}
}
finally
{
// 读完数据后,调用关闭
reader.Close();
}
}
}
  • 通过DataAdapter对象将查询到的数据填充到DataSet中。
private void Button_Click(object sender, RoutedEventArgs e)
{
string conStr = "";//连接字符串
using (SqlConnection conn = new SqlConnection(conStr))
{
conn.Open();//打开连接
string sql = "";//sql语句
SqlDataAdapter sda = new SqlDataAdapter(sql,conn);//实例化SqlDataAdapter对象
DataSet ds = new DataSet();
sda.Fill(ds);//填充数据集
}
}
 

添加、修改、删除,从上图中可以看到,有两种方式:

  • 通过Command对象的ExecuteNonQuery 方法 (),可以使用 ExecuteNonQuery来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句。
private static void CreateCommand(string queryString,string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
}
  • 使用DataSet来更数据库中的数据。
static private DataSet UpdateDataSet(string connectionString)
{
DataSet dataSet = new DataSet();//实例化数据集dataset
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();//打开连接
SqlDataAdapter adapter = new SqlDataAdapter();//实例化SqlDataAdapter对象
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.Fill(dataSet);//填充数据集dataset
dataSet.Tables[0].Rows[0][0] = 2;//修改数据
adapter.Update(dataSet);//更新dataset
}
return dataSet;
}

ADO.NET五大对象理论和实践(草稿)的更多相关文章

  1. 数据库学习之ADO.NET五大对象

    1 [ADO.NET]      ado.net 是一种数据访问技术,使得应用程序能够连接到数据存储,并以各种方式操作存储在里面的数据.    2 [ADO.NET五大常用对象]     Connec ...

  2. ado.net五大对象

    五大对象分别是: 1. Connection:与数据源建立连接. 2. Command:对数据源执行SQL命令并返回结果. 3. DataReader:读取数据源的数据,只允许对将数据源以只读.顺向的 ...

  3. ADO.NET五大对象详解

    Connection 连接对象 用于对数据库的连接操作.传入的参数为连接字符串. Commamd 命令对象 用于执行对数据库的操作 ,传入的参数可以为连接字符串或存储过程,也必须传入连接对象的实例. ...

  4. ADO.NET五大对象增删改查使用

    string ConnStr = "Data Source=.;Initial Catalog=ADO_DEMO;Integrated Security=True"; #regio ...

  5. ADO五大对象

     ADO.NET五大对象, 1. Connection:与数据源建立连接. 2. Command:对数据源执行SQL命令并返回结果. 3. DataReader:读取数据源的数据,只允许对将数据源以只 ...

  6. ADO五大对象(转载)

    来源:http://blog.csdn.net/u013201439/article/details/51111969 ADO五大对象(转载) 一.绪论 1.引言 在数据库应用系统中,必定要涉及到对数 ...

  7. ADO.NET的五大对象

    ADO.NET是一种数据访问技术,使得应用程序可以连接到数据库存储,并以各种方式操作存储在其中的数据.该技术基于.NETFramework,与.NET Framework类库的其余部分高度集成. 其中 ...

  8. Java 理论与实践: 流行的原子——新原子类是 java.util.concurrent 的隐藏精华(转载)

    简介: 在 JDK 5.0 之前,如果不使用本机代码,就不能用 Java 语言编写无等待.无锁定的算法.在 java.util.concurrent 中添加原子变量类之后,这种情况发生了变化.请跟随并 ...

  9. Java 理论和实践: 了解泛型

    转载自 : http://www.ibm.com/developerworks/cn/java/j-jtp01255.html 表面上看起来,无论语法还是应用的环境(比如容器类),泛型类型(或者泛型) ...

随机推荐

  1. Cesium原理篇:6 Renderer模块(1: Buffer)

    刚刚结束完地球切片的渲染调度后,打算介绍一下目前大家都很关注的3D Tiles方面的内容,但发现要讲3D Tiles,或者充分理解它,需要对DataSource,Primitive要有基础,而这要求对 ...

  2. 一台电脑上的git同时使用两个github账户

    需求: 公司有github账号,自己有github账号,想在git上同时使用,两者互不干扰. 思路: 管理两个SHH key. 解决方案: 一.生成两个SSH key 为了举例方便,这里使用“one” ...

  3. TreeView控件使用

    treeView1.SelectedNode = treeView1.Nodes[0];  //选中当前treeview控件的根节点为当前节点添加子节点:  TreeNode tmp; tmp = n ...

  4. 通过SQL Server自定义数据类型实现导入数据

    写在前面 在看同事写的代码时看到了SQL Server中可以自定义数据类型,而且定义的是DataTable类型的数据类型. 后我想起了以前我们导入数据时要么是循环insert写入,要么是SqlBulk ...

  5. 在线预览Office文件【效果类似百度文库】

    引言 结合上个项目和目前做的这个项目,其中都用到了Office文件在线预览,目前项目中是用到公司购买的Ntko控件,该控件每次浏览文件时则会提示安装信任插件,很繁琐,而且浏览效果不好. 提到Offic ...

  6. 【JVM】JVM系列之类加载机制(四)

    一.前言 前面分析了class文件具体含义,接着需要将class文件加载到虚拟机中,这个过程是怎样的呢,下面,我们来仔细分析. 二.什么是类加载机制 把class文件加载到内存,并对数据进行校验.转换 ...

  7. inno setup读取注册表遇到的一个坑

    一.背景 目前,公司针对PR开发的一个插件需要发布到64位系统上.该插件包括一个prm格式的文件和若干个DLL文件.其中,prm文件需要复制到PR公共插件目录下,DLL需要复制到Windows系统目录 ...

  8. 【原创】Kafka console consumer源代码分析(一)

    上一篇中分析了Scala版的console producer代码,这篇文章为读者带来一篇console consumer工作原理分析的随笔.其实不论是哪个consumer,大部分的工作原理都是类似的. ...

  9. linq的简单增删改查

    Linq高集成化的数据访问类,它会自动映射数据库结构,将表名完整映射成为类名,将列名完整映射成字段名数据库数据访问,能大大减少代码量.(反正最后结果就是不用写ado.Net那一套增删改查,有一套封装好 ...

  10. 使用abp模板创建解决方案

    前言 ABP官网(http://www.aspnetboilerplate.com/),本地环境 sql server EXPRESS +vs2013 通过官网生成 module zero 解决方案模 ...