以下介绍直接来源与百度百科,介绍十分全面和详细,作为小菜的我们没有理由不看完这些枯燥的介绍原有:
ADO.NET的名称起源于ADO(ActiveX Data Objects),是一个COM组件库,用于在以往的Microsoft技术中访问数据。之所以使用ADO.NET名称,是因为Microsoft希望表明,这是在NET编程环境中优先使用的数据访问接口。
1简介
System.Data.dll、System.Data.Design.dll、 System.Data.OracleClient.dll、System.Data.SqlXml.dll、 System.Data.Linq.dll、System.Data.SqlServerCe.dll 和 System.Data.DataSetExtensions.dll 组件无法区分使用者的私用资料与非私用资料。这些组件不会收集、储存或传输任何使用者的私用资料。不过,协力厂商应用程序可能会使用这些组件来收集、存储 或传输使用者的私用资料。
3架构
资料提供者
.NET Framework 资料提供者是一种明确设计用于管理资料以及快速存取顺向只读资料的元件。Connection 物件会提供资料来源的连接。Command 物件可让开发人员存取资料库命令,以便传回资料、修改资料、执行预存程序 (Stored Procedure),并且传送或撷取参数资讯。DataReader 则可提供来自资料来源的高效能资料流。最后,DataAdapter 会提供 DataSet 物件与资料来源之间的桥接器 (Bridge)。DataAdapter 会使用 Command 物件与资料来源处执行 SQL 命令,以便将资料载入 DataSet,并且将 DataSet 内的资料变更调节回资料来源。
DataSet
4作用
ado.net是与数据源交互的.NET技术。有许多的Data Providers,它将允许与不同的数据源交流――取决于它们所使用的协议或者数据库。然而无论使用什么样的Data Provider,开发人员将使用相似的对象与 数据源进行交互。SqlConnection对象管理与数据源的连接。SqlCommand对象允许开发人员与数据源交流并发送命令给它。为了对进行快速 的只“向前”地读取数据,使用SqlDataReader。如果想使用断开数据,使用DataSet并实现能进行读取或者写入数据源的 SqlDataAdapter。
5类库
Connection 类
Command对象
DataReader类
DataSet对象
DataAdapter类
某 些时候开发人员使用的数据主要是只读的,并且开发人员很少需要将其改变至底层的数据源。同样一些情况要求在内存中缓存数据,以此来减少并不改变的数据被数 据库调用的次数。DataAdapter通过断开模型来帮助开发人员方便的完成对以上情况的处理。当在一单批次的对数据库的读写操作的持续的改变返回至数 据库的时候,DataAdapter 填充(fill)DataSet对象。DataAadapter包含对连接对象以及当对数据库进行读取或者写入的时候自动的打开或者关闭连接的引用。另 外,DataAdapter包含对数据的SELECT、INSERT、UPDATE和DELETE操作的Command对象引用。开发人员将为 DataSet中的每一个Table都定义DataAadapter,它将为开发人员照顾所有与数据库的连接。所以开发人员将做的工作是告诉 DataAdapter什么时候装载或者写入到数据库。
Command对象操作数据的
1.使用Command对象查询数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
using
System;
using
System.Collections.Generic;
using
System.Configuration;
using
System.Data;
using
System.Data.SqlClient;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
namespace
WebApplication
{ public
partial class DemoCommand : System.Web.UI.Page
{
protected
void Page_Load( object
sender, EventArgs e)
{
if
(!IsPostBack)
{
//建立数据库链接
SqlConnection myConn = GetConnection();
//打开数据库链接
myConn.Open();
//定义查询SQL语句
string
sqlStr = "select * from mytable" ;
//初始化查询命令
SqlCommand myCmd = new
SqlCommand(sqlStr, myConn);
//执行查询
SqlDataReader dr = myCmd.ExecuteReader();
//读取查询数据
while
(dr.Read())
{
Response.Write(dr[1].ToString() + "<br>" );
}
myConn.Close();
}
}
private
SqlConnection GetConnection()
{
//获取配置文件中的数据库链接配置
string
myStr = ConfigurationManager.AppSettings[ "ConnectionString" ].ToString();
SqlConnection myConn = new
SqlConnection(myStr);
return
myConn;
}
}
} |
2.使用Command对象添加数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
using
System;
using
System.Configuration;
using
System.Data;
using
System.Linq;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Xml.Linq;
using
System.Data.SqlClient;
public
partial class _Default : System.Web.UI.Page
{ protected
void Page_Load( object
sender, EventArgs e)
{
if
(!IsPostBack)
{
//建立数据库链接
SqlConnection myConn = GetConnection();
//打开数据库链接
myConn.Open();
//定义查询SQL语句
string
sqlStr = "insert into tb_Class(ClassName) values(‘"
+ TextBox1.Text + "‘)" ;
//初始化查询命令
SqlCommand myCmd = new
SqlCommand(sqlStr, myConn);
if
(myCmd.ExecuteNonQuery() > 0)
{
Response.Write( "添加成功!" );
}
else
{
Response.Write( "添加失败!" );
}
myConn.Close();
}
else
{
Response.Write( "内容不能为空!" );
}
}
public
SqlConnection GetConnection()
{
//获取配置文件中的数据库链接配置
string
myStr = ConfigurationManager.AppSettings[ "ConnectionString" ].ToString();
SqlConnection myConn = new
SqlConnection(myStr);
return
myConn;
}
} |
修改删除写法大同小异,不在啰嗦。。。。
使用DataSet对象和DataAdapter对象
1.使用DataAdapter对象填充DataSet对象
演示如果从Mytable中查询信息,并且调用DataAdapter的Fill方法填充到DataSet数据集,然后将DataSet的数据绑定到GridView。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
using
System;
using
System.Collections.Generic;
using
System.Data;
using
System.Data.SqlClient;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
namespace
WebApplication
{ public
partial class DemoDaset : System.Web.UI.Page
{
protected
void Page_Load( object
sender, EventArgs e)
{
if
(!IsPostBack)
{
//创建一个DataSet数据集
DataSet ds = new
DataSet();
string
sqlStr = "select * from Mytable" ;
SqlConnection con = new
SqlConnection( "Server=MRWXK\\MRWXK;database=db_12;UId=sa;pwd=;" );
SqlDataAdapter dap = new
SqlDataAdapter(sqlStr, con);
//连接数据库
con.Open();
//使用SqlDataAdapter对象的Fill方法填充数据集
dap.Fill(ds, "Student" );
//将数据集中的所有数据显示到GridView控件中
GridView1.DataSource = ds;
GridView1.DataBind();
}
}
}
} |
2.使用DataAdapter更新数据库中数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
using
System;
using
System.Collections.Generic;
using
System.Data.SqlClient;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
namespace
WebApplication
{ public
partial class DemoDataSet1 : System.Web.UI.Page
{
protected
void Page_Load( object
sender, EventArgs e)
{
//连接字符串及SQL语句
SqlConnection con = new
SqlConnection( "Server=mrwxk\\mrwxk;database=db_12;UId=sa;pwd=;" );
con.Open();
string
sqlStr = "select * from MyNewTables " ;
SqlDataAdapter dap = new
SqlDataAdapter(sqlStr, con);
//创建DataSet对象
DataSet ds = new
DataSet();
//创建SqlCommandBuilder对象,并和SqlDataAdapter关联
SqlCommandBuilder builder = new
SqlCommandBuilder(dap);
dap.Fill(ds, "News" );
for
( int
i = 0; i <= ds.Tables[ "News" ].Rows.Count - 1; i++)
{
ds.Tables[ "News" ].Rows[i][ "NewsContent" ] = ds.Tables[ "News" ].Rows[i][ "NewsContent" ].ToString() + DateTime.Today.ToShortDateString();
}
//从DataSet更新SQL Server数据库
dap.Update(ds, "News" );
GridView1.DataSource = ds;
GridView1.DataKeyNames = new
string [] { "NewsID"
};
GridView1.DataBind();
dap.Dispose();
ds.Dispose();
con.Close();
}
}
} |
补充说明:DadaSet中的数据必须至少存在一个主键列或者唯一列,如果不存在主键列或者唯一列,调用Update时将会产生InvalidOperation异常,而且不会生成自动更新数据库的INSERT,UPDATE或者DELETE命令.
使用DataReader对象
使用DataReader对象读取数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
using
System;
using
System.Collections.Generic;
using
System.Data;
using
System.Data.SqlClient;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
namespace
WebApplication
{ public
partial class DemoDataReader : System.Web.UI.Page
{
protected
void Page_Load( object
sender, EventArgs e)
{
if
(!IsPostBack)
{
SqlConnection myConn = new
SqlConnection( "Server=mrwxk\\mrwxk;database=db_12;UId=sa;pwd=;" );
string
sqlStr = "select * from Mytable " ;
SqlCommand myCmd = new
SqlCommand(sqlStr, myConn);
myCmd.CommandType = CommandType.Text;
try
{
//打开数据库连接
myConn.Open();
//执行SQL语句,并返回DataReader对象
SqlDataReader myDr = myCmd.ExecuteReader();
//以粗体显示标题
string
strTxt = "<B>序号 新闻内容</b><br>" ;
//循环读取结果集
while
(myDr.Read())
{
//读取数据库中的信息并显示在界面中
strTxt += " "
+ myDr[ "NewsID" ] + " "
+ myDr[ "NewsContent" ] + "<br>" ;
}
//关闭DataReader
myDr.Close();
Response.Write(strTxt);
}
catch
(SqlException ex)
{
//异常处理
Response.Write(ex.ToString());
}
finally
{
//关闭数据库的连接
myConn.Close();
}
}
}
}
} |
说明:
调用Reader方法后,当前行的信息就返回到DataReader对象中,这时从具体的列中访问数据有3种方法。
- 使用列明索引器。
- 使用序数索引器。
- 使用类型访问器。
访问速度最快类型>序数>列名...........
DataReader对象与DataSet对象的区别
DataSet在为用户查询数据时的步骤如下:
- 创建DataAdapter对象.
- 定义DataSet对象.
- 执行DataAdapter对象的Fill方法。
- 将DataSet中的表绑定到数据控件中。
DataReader在为用户查询数据时的步骤如下:
- 创建连接
- 打开连接
- 创建Command对象
- 执行Command的ExecuteReader方法
- 将DataReader绑定到数据控件中
- 关闭DataReader
- 关闭练级