在说C#操作数据库之前需要先说下ADO.NET。ADO.NET的名称起源于ADO(ActiveX Data Objects),是一个COM组件库,用于在以往的Microsoft技术中访问数据。之所以使用ADO.NET名称,是因为Microsoft希望表明,这是在NET编程环境中优先使用的数据访问接口。

ADO.NET可让开发人员以一致的方式存取资料来源(例如 SQL Server 与 XML),以及透过 OLE DB 和 ODBC 所公开的资料来源。资料共用的消费者应用程序可使用ADO.NET 来连接至这些资料来源,并且撷取、处理及更新其中所含的资料。ADO.NET类别 (Class) 位于 System.Data.dll 中,我们操作数据库使用的便是ADO.NET中的几个类,这几个类分别为:

1.Connection类:用于创建于数据库的连接。

2.Command类:用于下达SQL命令

3.DataReader类:读取数据

4.DataSet类:数据集

5.DataAdapter类:数据适配命令

以上便是我们操作数据库所使用的几个类,下面我们来分别看一下。

一、Connection

想要操作数据库,就必须先与数据库建立连接。Connection便是用于建立与数据库的联系的类。

创建于数据库的连接可以归纳为三个步骤:

  1. 创建连接字符串;
  2. 创建Connection对象;
  3. 打开数据库;

1.连接字符串:

创建用于SQL数据库连接的字符串一般有两种,一种是Windows认证方式字符串;另一种是SQL Server认证方式字符串;

  • Windows认证方式字符串格式:Server=服务器名称; integrated security=SSPI; Initial Catalog=数据库名称;
  • SQL Server认证方式字符串格式:Server=服务器名称; user=登录SQL的用户名; password=用户名对应的密码; database=数据的名称;

其中如果本机上的数据库,服务器名称可以有四种表示方式:1.计算机名;2.localhost;3..;4.IP地址;

2.创建Connection对象需要先引用命名空间System.Data.SqlClient; 创建对象格式为:

SqlConnection 对象名 = new SqlConnection(连接字符串);

3.打开与关闭数据库则是调用SqlConnection对象的方法open()与close();可以与try{}catch{}finally{}结合使用。

放个代码例子:

 using System.Data.SqlClient;//应用命名空间

             //定义字符串
string connectionStr = "Server=localhost;integrated security=SSPI;Initial Catalog=mydb001";
//创建连接对象
SqlConnection myConnection = new SqlConnection(connectionStr);
//测试是否连接成功
try
{
myConnection.Open();
}
catch
{
MessageBox.Show("数据库连接错误","错误提示");
}
finally
{
myConnection.Close();
}

二、Command下达SQL命令

使用Command的步骤:

  1. 创建命令字符串;
  2. 创建Command对象;
  3. 写入命令;

1.命令字符串即为SQL命令语句;

2.创建Command对象格式为:

SqlCommand myCommand = new SqlCommand(命令字符串,Connection对象名);

3.写入命令可以用Command的方法:

方法 返回值描述
ExecuteNonQuery() 不返回任何结果,常用于updata/insert/delete等不带返回值的命令
ExecuteScalar() 返回一个值,用于只带一个返回值得命令,如count/max/min等
ExecuteReader() 返回一个IDataReader

放个代码例子:

             //定义字符串
string connectionStr = "Server=localhost;integrated security=SSPI;Initial Catalog=mydb001";
//创建连接对象
SqlConnection myConnection = new SqlConnection(connectionStr);
//测试是否连接成功
try
{
myConnection.Open();//打开数据库
string commandSQLStr = "insert into mytable001(姓名,性别,年龄)values('张三','男',30)";//命令字符串
SqlCommand myCommand = new SqlCommand(commandSQLStr,myConnection);//创建Command对象
myCommand.CommandTimeout = ;//设置超时时间为5秒
myCommand.ExecuteNonQuery();
}
catch
{
MessageBox.Show("数据库连接错误","错误提示");
}
finally
{
myConnection.Close();//关闭数据库
}

三、DataReader读取数据

DataReader对象提供了顺序的,只读的方式读取Command对象获得的数据结果集。正是因为DataReader是以顺序的方式连续地读取数据,所以DataReader会以独占的方式打开数据库连接。

由于DataReader只执行读操作,并且每次只在内存缓冲区里存储结果集的一条数据,所以使用Datareader对象的效率比较高,如果要查询大量数据,同事不需要随机访问和修改数据,DataReader是优先的选择。DataReader对象有许多的属性和方法:

属性:

  • FieldCount属性:该属性用来表示由DataReader得到的一行数据中的字段数。
  • HasRows属性:该属性用来表示DataReader是否包含数据。
  • IsClosed属性:该属性用来表示DataReader对象是否关闭。

方法:

  • Close 将DataReader 对象关闭
  • GetDataTypeName 取得指定字段的数据型态
  • GetName 取得指定字段的字段名称
  • GetOrdinal 取得指定字段名称在纪录中的顺序
  • GetValue 取得指定字段的数据
  • GetValues 取得全部字段的数据
  • IsNull 用来判断字段内是否为Null 值
  • NextResult 用来和SQL Script 搭配使用,表示取得下一个结果
  • Read 让DataReader 读取下一笔记录,如果有读到数据则传回True,若没有纪录则传回False

放个代码例子:

             //定义字符串
string connectionStr = "Server=localhost;integrated security=SSPI;Initial Catalog=mydb001";
//创建连接对象
myConnection = new SqlConnection(connectionStr);
//测试是否连接成功
try
{
myConnection.Open();//打开数据库
string commandSQLStr = "select * from mytable001";//命令字符串
SqlCommand myCommand = new SqlCommand(commandSQLStr, myConnection);//创建Command对象
myCommand.CommandTimeout = ;//设置超时时间为5秒
SqlDataReader myDataReader = myCommand.ExecuteReader();
}
catch
{
MessageBox.Show("数据库连接错误","错误提示");
}
finally
{
myConnection.Close();//关闭数据库
}

四、DataSet数据集

DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的。

DataSet对象由一组DataTable对象组成,这些对象与DataRelation对象互相关联。这些DataSet对象又包含Rows集合,Columns集合,Rows集合由多个DataRow对象组成,Columns集合由多个DataColumn对象组成。

由于DataSet对象很像数据库,所以可以像访问关系型数据库那样访问DataSet,例如在DataSet中添加,删除表,在表中进行查询数据,删除数据等操作。

DataSet对象有常用的方法:

五、DataAdapter数据适配命令

DataAdapter对象是DataSet和数据之间的桥梁,可以建立并初始化数据表对数据源执行SQL指令,与DataSet对象结合,提供DataSet对象存储数据,可视为DataSet对象的操作核心。

在使用DataAdapter对象时,只需要设置表示SQL命令和数据库连接的两个参数,就可以通过Fill方法把查询结果放置在一个DataSet对象中。DataAdapter对象可用于执行数据库的命令操作,含有四个不同的操作命令:

  • SelectCommand:用来选取数据源中的记录;
  • InsertCommand:用来向数据源中新插入一条记录;
  • UpdateCommand:用来更新数据源中的数据;
  • DeleteCommand:用来删除数据源中的记录。
DataAdapter的两个主要方法:
  • Fill:从数据源增加或刷新行,并将这些行放到DataSet表中。
  • Updata:将DataSet表的更改传送到相应的数据源中。
使用带SQL Server .NET数据提供程序的DataSet的步骤如下:
(1)创建SqlConnection对象,连接到SQL Server数据库。
(2)创建SqlDataAdapter对象。该对象包含能够指向4个SqlCommand对象的属性,这些对象指定SQL语句在数据库中进行SELECT、INSERT、DELETE和UPDATE等数据操作。
(3)创建包含一个或多个表的DataSet对象。
(4)使用SqlDataAdapter对象,通过调用Fill方法来填充DataSet表。SqlDataAdapter隐式执行包含SELECT语句的SqlCommand对象。
(5)修改DataSet中的数据。可以通过编程方式来执行修改,或者将DataSet绑定到用户界面控件(例如DataGrid),然后在控件中更改数据。
(6)在准备将数据更改返回数据库时,可以使用SqlDataAdapter并调用Update方法。SqlDataAdapter对象隐式使用其SqlCommand对象对数据库执行INSERT、DELETE和UPDATE语句。

C#对SQL数据库操作类简介:Connection、Command、DataReader、DataSet、DataAdapter的更多相关文章

  1. 个人博客设计:创建Sql数据库操作类。

    整体的博客框架如下 数据库操作java类如下 package com.yxq.dao; import java.sql.Connection; import java.sql.DriverManage ...

  2. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

  3. PDO数据库操作类

    <?php include 'common_config.php'; /** * Class Mysql * PDO数据库操作类 */ class Mysql { protected stati ...

  4. C# Oracle数据库操作类实例详解

    本文所述为C#实现的Oracle数据库操作类,可执行超多常用的Oracle数据库操作,包含了基础数据库连接.关闭连接.输出记录集.执行Sql语句,返回带分页功能的dataset .取表里字段的类型和长 ...

  5. C#全能数据库操作类及调用示例

    C#全能数据库操作类及调用示例 using System; using System.Data; using System.Data.Common; using System.Configuratio ...

  6. (转)C# Oracle数据库操作类

    原文地址:http://www.cnblogs.com/haibing0107/p/6143922.html using System;using System.Data;using System.C ...

  7. 数据库操作类《SqlHelper》

    一.背景 在看了一本书叫<Visual Studio 2010(C#)Windows数据库项目开发>后,觉得很多编程技术需要积累,因为一个简单的项目里包含的技术太多了,容易忘记.每次需要用 ...

  8. Oracle数据库操作类及连接方法

    创建DataBaseAccess引用库下面包括DBConnectionString.cs,DBType.cs ,SysName.cs 三个类 DBConnectionString: using Sys ...

  9. C# Oracle数据库操作类

    using System; using System.Data; using System.Collections.Generic; using System.Configuration; using ...

随机推荐

  1. 解压tar包中的指定文件

    解压<a 'tar');"="" href="http://asmboy001.blog.51cto.com/'#\'"" targe ...

  2. Django中的Cookie和Session操作以及CBV

    1.Cookie 平常我们在浏览网页的时候,在需要输入密码的地方,如果已经登陆了一次,并且时间间隔比较近的话,是不需要登陆的,为什么了?这就是Cookie的作用. Cookie(或Cookies)指某 ...

  3. Kattis - entertainmentbox 【贪心】

    思路 先将 N 个 电视节目 排序 根据 结束时间 ,结束的早的 排在前面 然后 弄 K个标记 记录 结束时间 然后 遍历一下 每次 如果能插入的话 插入到 结束时间最小的那个 队列里面去然后 每次插 ...

  4. nc命令用法

    root@10.1.1.43:~# nc -h[v1.10-38]connect to somewhere: nc [-options] hostname port[s] [ports] ... li ...

  5. redis主从架构及redis集群

    https://redis.io/topics/cluster-spec Redis Cluster does not support multiple databases like the stan ...

  6. Entity Framework在Asp.net MVC中的实现One Context Per Request(转)

    上篇中"Entity Framework中的Identity map和Unit of Work模式", 由于EF中的Identity map和Unit of Work模式,EF体现 ...

  7. 在Treeview中节点的data属性中保存记录类型及其消除的办法

    一.保存记录类型在data指针中: procedure TForm1.getheaditems(pp:TfrxBand;hnode:THeadTreeNode;var i:Integer;var j: ...

  8. UVA 1664 Conquer a New Region (并查集+贪心)

    并查集的一道比较考想法的题 题意:给你n个点,接着给你n-1条边形成一颗生成树,每条边都有一个权值.求的是以一个点作为特殊点,并求出从此点出发到其他每个点的条件边权的总和最大,条件边权就是:起点到终点 ...

  9. php数据结构课程---3、队列(队列实现方法)

    php数据结构课程---3.队列(队列实现方法) 一.总结 一句话总结: 1.数据实现:适用于功能不复杂的情况 2.链表实现:受限链表,只能队头队尾操作:适用于功能复杂情况 1.队列的数组实现注意点? ...

  10. spring与mybati整合方法

    (1)spring配置文件: <!-- 引入jdbc配置文件 --> <context:property-placeholder location="jdbc.proper ...